vb.net/devエクスプレスツールを使用しています。私たちはいくつかのコントロールのテキストボックス、コンボなどを持っています...変更された各値をチェックするのではなく、すべてのコントロールを調べて何かが編集されているかどうかをチェックし、以下は私がこれを達成しようとしたいくつかのコードです。問題は、それは技術的には動作しますが...再帰AddDirtyEvent(c)を使用するので、フォームを閉じて[はい]をクリックして保存します。複数のコントロールのためにメッセージボックスを複数回呼び出す...それは働かず、汚れた変化を検出しません。私はちょうど...私はこれは私がしたいか、もっと簡単な方法がある場合のように動作するように取得する方法コントロールが変更されていないかチェックし、フォーム終了時にデータを保存します
Dim is_Dirty As Boolean = False
Private Sub AddDirtyEvent(ByVal ctrl As Control)
For Each c As Control In ctrl.Controls
If TypeOf c Is TextEdit Then
Dim tb As TextEdit = CType(c, TextEdit)
AddHandler tb.EditValueChanged, AddressOf SetIsDirty
End If
'If TypeOf c Is ComboBoxEdit Then
' Dim cb As ComboBoxEdit = CType(c, ComboBoxEdit)
' AddHandler cb.SelectedIndexChanged, AddressOf SetIsDirty
'End If
If c.Controls.Count > 0 Then
AddDirtyEvent(c)
End If
Next
End Sub
Private Sub SetIsDirty(ByVal sender As System.Object, ByVal e As System.EventArgs)
is_Dirty = True
End Sub
Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
If is_Dirty = True Then
Dim dr As DialogResult = MessageBox.Show("Do you want save changes before leaving?", "Closing Well Info", MessageBoxButtons.YesNo, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button2)
If dr = Windows.Forms.DialogResult.Yes Then
SimpleButtonSave.PerformClick()
Me.Close()
End If
End If
End Sub
Sirus、これはあなたの問題を解決します(とき)場合、未回答の一覧をオフにこれを移動するには、チェックマークをクリックしてください。何もありませんが、あなたには数多くの質問があり、答えは受け入れられません。 – Plutonix
okありがとう..別の質問があります。私たちはグリッドコントロールとグリッドビューを持っています。 gridiviewはgridcontrolの中にあり、私はフォーム上のコントロールを見つけようとしています。gridviewは見つかりませんが、gridcontrolを見つけることができます。しかし、グリッドコントロールが見つかったら、グリッドビュー内の何かが変更された場合は変更する必要があります...任意のアイデア – Sirus