Formu kapatırken sorun yaşanıyor ve hiçbir şey değişmemişse, yine de formu kaydetmeniz isteniyor. Çoklu kontrollere sahip bir formumuz var. Verilere sahip birkaç arama kutusu vardır. Verilerini seçiyorlar ve ardından "view" adında bir düğmeyi tıklıyorlar. Görünüm daha sonra birkaç metin kutusu ve açılan kutu vb. Getirir ve verilerle doldurulur. Ayrıca yüklenen bir RichEditControl
da var. Tüm veriler yük olayında yüklendikten sonra. Son satır, tüm denetimler için olay işleyicilerini ayarlamak için aşağıdaki yöntemi çağırmaktır. Bundan sonra bir şey değiştiyse, form kapanışından tasarruf isteyin.RichEditControl olay işleyicisi, hiçbir şey değişmeden formda kaydetmeyi isteyen
customFunc.AddDirtyEvent(Me)
konudur ve hiçbir richtextbox varsa biz test var, çalışıyor. Bir formdaki tek denetim bir RichEditControl
ise, her ne olursa olsun, ne yük olursa olsun hiçbir şey değişmemiş olsa bile, kaydetmeyi ister. RichEditControl
olan bir formunuz varsa ve form yüküne göre doldurulursa farkettim. Bundan sonra eventhandler'ı çağırsanız bile, eventhandler çağrısını formda görünen olaya eklerseniz, yine de BUT'u kaydetmenizi ister, kirli biti tekrar ayarlamadığı için çalışır gibi görünür. Neredeyse olayları gibi form yükleme olayın sonunda kuyruk vardır. Ama sonra gösterilen olaya gider, çağrı orada yapılır ve kirli bit geri doğru sıfırlanmaz.
Sorun bizim örneğimizde, gösterilen bir olayı kullanamayız, çünkü tüm verileri yükleyen ve RichEditControl
'u dolduran bir "görünüm" düğmemiz vardır. Bu yüzden, veri aynı yöntemle yüklendikten sonra olay işleyicilerini eklesek bile, kirli biti doğruya ayarlamak için her zaman geri döner. Bundan sonra kirli biti false
'a saklamamız gerekecek, bu yüzden eğer herhangi bir değişiklik yoksa ve sadece veriyi görüntülemek istiyorsanız, form kapanışından tasarruf edilmesini istemezler. Aşağıda benim kodum. RichEditControl.Modified
mülk için SetIsDirty
yöntem kontroller sırasında
If customFunc.IsDirty = True Then
Dim dr As DialogResult = MessageBox.Show("Do you want save changes before leaving?", "Closing Mud Report", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2)
If dr = Windows.Forms.DialogResult.Yes Then
SimpleButtonSave.PerformClick()
ElseIf dr = Windows.Forms.DialogResult.Cancel Then
e.Cancel = True
End If
End If
Private Sub SetIsDirty(ByVal sender As System.Object, ByVal e As System.EventArgs)
is_Dirty = True
End Sub
Public Sub AddDirtyEvent(ByVal ctrl As Control)
For Each c As Control In ctrl.Controls
If TypeOf c Is RichEditControl Then
Dim rtb As RichEditControl = CType(c, RichEditControl)
AddHandler rtb.RtfTextChanged, AddressOf SetIsDirty
End If
If c.Controls.Count > 0 Then
AddDirtyEvent(c)
End If
Next
End Sub
ama normal bir RichTextBox denetiminin konuyu yinelenen olamaz. Bir şey, form yüklendikten sonra muhtemelen metni değiştiriyordur. Bir düğmeyi kullanarak 'customFunc.AddDirtyEvent (Me)' öğesini çağırmayı deneyin. – LarsTech
evet kullandığımız DevExpress 13.2 – Sirus
anladım eğer is_dirty = is_dirty –