Benim C# uygulama,olay ile bir comboBox
vardır. Genellikle, bu olayın ateşlenmesini istiyorum, ama bazen olayın ateş edilmesine ihtiyacım var. Benim comboBox
bir MRU dosya listesidir. Listede bir dosya bulunamazsa, öğe comboBox
'dan kaldırılır ve comboBox
SelectedIndex
sıfıra ayarlanır. Ancak, comboBox
SelectedIndex
değerini sıfır olarak ayarlamak, SelectedIndexChanged
olayının tetiklenmesine neden olur; bu, bu durumda sorunludur çünkü bazı UIF kodları olay işleyicisinde çalıştırılmasına neden olur. C# form denetimleri için olayları devre dışı bırakmak/etkinleştirmek için zarif bir yol var mı? Teşekkürler. ediyoruz Sorun farklı EventHandler ile size ilk eventhandler olay kaydını kaldırmak olsaydıC# Uygulaması tetiklenmeden ComboBox SelectedIndex değiştiriliyor #
cevap
ComboBox combo = sender as ComboBox;
if (combo.SelectedIndex == 0)
{
return;
}
ile eventhandler yöntemini başlatın
.
combo.SelectedIndexChanged -= EventHandler<SelectedIndexChangedEventArgs> SomeEventHandler;
combo.SelectedIndex = 0;
combo.SelectedIndexChanged += EventHandler<SelectedIndexChangedEventArgs> SomeEventHandler;
One (oldukça çirkin) yolu girişi siler kodunda bir bayrak ayarlayın ve sonra SelectedIndexChanged
işleyicisinde kontrol etmek olacaktır:
if (!deletedEntry)
{
// Do stuff
}
deletedEntry = false;
daha iyi bir yolu kaldırmak olabilir senin Silme yönteminin başlangıcında SelectedIndexChanged
olay işleyicisi ve sonunda yeniden durumuna getirin. Bu şekilde kod, endeksin değiştiğini bilmez.
Yıllar boyunca birçok kez karşılaştım. Benim çözümüm, _noise adında bir sınıf düzeyi değişkenine sahip olmak ve eğer seçili indeks değiştiğinde açılan combo veya diğer herhangi bir benzer kontrolün indeksini değiştirmek üzereysem, aşağıdaki kodu koyarım. Ben aşağıdakileri yapın ben endeksi değiştirmek için gidiyorum bildiğinizde İşte
private bool _noise;
private void cbTest_SelectedIndexChange(object sender, EventArgs e)
{
if (_noise) return;
// process the events code
...
}
Ardından kumanda olay işleyicisi kodudur:
_noise = true; // cause the handler to ignore the noise...
cbTest.Index = value;
_noise = false; // let the event process again
Bunu yapmanın daha iyi bir yolu olmadığına şaşırdım, ama bu benim yaptığım yol. Çoğu denetimin Tag
alanını kullanıyorum, bu yüzden denetimi alt sınıflara ayırmam gerekmiyor. Ve null
varsayılan olduğundan true
/null
değerlerini kullanıyorum. Aslında Tag
kullanıyorsanız Tabii
, sen işleyicisi
... farklı yapmak gerekir: Ana kodunda
private void control_Event(object sender, EventArgs e)
{
if (control.Tag != null) return;
// process the events code
...
}
try
{
control.Tag = true;
// set the control property
control.Value = xxx;
or
control.Index = xxx;
or
control.Checked = xxx;
...
}
finally
{
control.Tag = null;
}
- 1. İkinci ComboBox
- 2. ValueMember değeri ComboBox C# Winforms'tan nasıl edinilir?
- 3. Combobox değişim vurgu rengi winRT (metro uygulaması)
- 4. C# WPF comboBox garip sayı
- 5. DataGridView combobox hücre olayı C#
- 6. Datagridview'e combobox ekle C# Winforms
- 7. C# Garip WPF Combobox Davranışı
- 8. Combobox C'den varsayılan öğe seçiliyor #
- 9. combobox
- 10. Combobox,
- 11. HTML5 DataList için bir SelectedIndex var mı?
- 12. Bir dize içinde "" 'değiştiriliyor
- 13. WPF 2 ComboBox bağlama sorunu
- 14. aşağıdaki ile bir combobox doldurmak istiyorum C#
- 15. ComboBox SelectedValue veya SelectedItem Binding WPF C#
- 16. C# Combobox öğesini listenin altına getir
- 17. JavaScript: Neden argüman değişkeni değiştiriliyor? Arguments` dizisi değiştiriliyor?
- 18. Kullanıcı değiştiriliyor NSURLConnection
- 19. Çeviri sırasında görüntü değiştiriliyor
- 20. C# jenerik fonksiyon uygulaması C
- 21. Bir ComboBox
- 22. npm ile bootstrap kullanımı değiştiriliyor
- 23. Publishing C# konsolu uygulaması
- 24. özel RAII C++ uygulaması
- 25. C# FNV Hash uygulaması
- 26. C# konsol uygulaması, PhP
- 27. Crc32 C uygulaması - çalışmaz
- 28. Bir sinyalin bir hata tetiklenmeden var olup olmadığı nasıl algılanır
- 29. Paylaş ComboBox DataSource
- 30. WPF Düzenlenebilir Combobox IsFocused problem