Bir süre böyle bir şey uygulamak isteyen sonra bu yazı geldi. National Instruments'tan düzenli olarak Measurement Studio'yu ve StateChanging veya StateChanged olayına sahip olan WinForms denetimlerini, ActionEventArgs türünde bir parametre iletirim. Bu, üç değeri alabilen bir özelliğe sahiptir: ByKeyboard, ByMouse ve Programatic. Bu, kontrol durumunun değişmesine neyin yol açtığını belirlemede çok faydalıdır. Bunu standart bir WinForms onay kutusunda çoğaltmak istedim. Ben yapmak için iyileştirmeler vardır eminim
public enum ControlSource
{
Programatic,
ByKeyboard,
ByMouse
}
public class AwareCheckBox : Checkbox
{
public AwareCheckBox()
: base()
{
this.MouseDown += AwareCheckbox_MouseDown;
this.KeyDown += AwareCheckbox_KeyDown;
}
private ControlSource controlSource = ControlSource.Programatic;
void AwareCheckbox_KeyDown(object sender, KeyEventArgs e)
{
controlSource = ControlSource.ByKeyboard;
}
void AwareCheckbox_MouseDown(object sender, MouseEventArgs e)
{
controlSource = ControlSource.ByMouse;
}
public new event AwareControlEventHandler CheckedChanged;
protected override void OnCheckedChanged(EventArgs e)
{
var handler = CheckedChanged;
if (handler != null)
handler(this, new AwareControlEventArgs(controlSource));
controlSource = ControlSource.Programatic;
}
}
public delegate void AwareControlEventHandler(object source, AwareControlEventArgs e);
public class AwareControlEventArgs : EventArgs
{
public ControlSource Source { get; private set; }
public AwareControlEventArgs(ControlSource s)
{
Source = s;
}
}
ama benim ilkel test çalıştığını göstermiştir:
İşte benim kodudur. Burada, diğerlerinin bu konuya karışması ve değişikliğin başlatılmasının nerede olduğunu ayırt etmenin daha açık bir yolunu istemek için buraya gönderdim. Herhangi bir yorum hoşgeldiniz.
Bu uygun yoldur. Teknik olarak, nihayet bir blokta false'ye geri döner. –