2008-09-17 18 views
2

Bir DataGridView denetimi ve içindeki bir DataGridViewButtonCell hücreleri sütununa sahip bir WinForms uygulamasına sahibim. Bu düğmelerden birini tıkladığımda, bir arka plan görevi başlatır ve bu görev tamamlanana kadar düğmelerini devre dışı bırakmak istiyorum.WinForms DataGrid'deki düğme hücresini nasıl devre dışı bırakırım?

DataGridView denetimini devre dışı bırakabilirim, ancak düğmelerin devre dışı bırakıldığını gösteren görsel bir belirti vermez. Kullanıcının düğmelerin devre dışı olduğunu ve düğmelerin tekrar etkinleştirildiğinde görevin tamamlandığını görmesini istiyorum.

Düğmeleri tek tek devre dışı bırakmamı sağlayan bir yöntem için bonus puanları, bu sayede görev çalışırken düğmelerden birini etkinleştirebilirim. (Aslında bonus puan veremediğimi unutmayın.)

cevap

3

Şimdiye kadar bulduğum en iyi çözüm. Bu MSDN article, Enabled özelliği ekleyen bir hücre sınıfı için kaynak kodu verir.

Bunu gayet iyi çalışır, ancak iki FRİKİKLERİNDEN vardır:

  1. herhangi hücreleri üzerinde etkin özelliğini ayarladıktan sonra ızgara geçersiz gerekir. Örnek kodda, ancak bunu özledim.
  2. Sadece görsel bir değişikliktir, Enabled özelliğini ayarlamak gerçekten düğmeyi etkinleştirmez veya devre dışı bırakmaz. Kullanıcı hala üzerine tıklayabilir. Tıklama etkinliğini gerçekleştirmeden önce etkinleştirilmiş mülkünü kontrol edebilirdim, ancak kullanıcı tıkladığında görünümü bozuyor gibi görünüyordu. Bunun yerine, tüm ızgarayı devre dışı bıraktım. Bu benim için iyi çalışıyor, ancak tüm ızgarayı devre dışı bırakmadan bazı düğmeleri devre dışı bırakmamı sağlayan bir yöntemi tercih ederim.

DataGridView FAQ'da benzer bir örnek var.

1

Bu denemeye olabilir: Mevcut satır tanımlayıcı ile işlem sınıf düzeyindeki listeden çalışıyorsa

siz hücreyi tıklayın

...

  1. kontrol edin; eğer öyleyse, hücre tıklama olayından çıkın.
  2. Satır tanımlayıcısını, çalışan işlemlerin sınıf düzeyi listesinde depolayın.
  3. Düğme metnini "Çalışıyor ..." veya uygun bir şekilde değiştirin.
  4. İşleminize temel bir RunWorkerCompleted olay işleyicisi ekleyin (kısaca açıklanır).
  5. Arka planWorker.RunWorkerAsync (rowIdentifier). DoWork olay işleyicisi

...

  1. Seti e.Result = e.Argument (veya argüman ve istenilen sonucu hem dönecektir bir nesne oluşturmak)

RunWorkerCompleted event hanlder ...

  1. Satır tanımlayıcıyı çalışan işlemler listesinden kaldırın (örn. Sonucu tanımlayıcıdır).
  2. Düğme metnini "Çalışıyor ..."Hazır" için "
+1

İlginç bir alternatif için teşekkürler, ancak düğmelerin grileştirilmesinin standart görsel işaretini tercih ederim. –

İlgili konular