2

データを事前にロードした約 20 個のコントロール ( 、 など) を含むフォームがありComboBoxます。TextBoxこれはユーザーに表示され、任意のフィールドを変更する機能をユーザーに提供します。

変化が起こったことを認識する最良の方法がわかりません。いくつかの調査の後、私はそれらの線に沿っTextBox.TextChangedてフラグまたは何かを見つけて設定しました。IsDirty = True

ユーザーが値を変更してから戻って、最初にロードされたときの状態に変更する可能性があるため、これが 100% の防弾になるとは思いません。現在のデータをに保存し、ユーザーが「キャンセル」をクリックして変更を保存するかどうかを尋ねるときに入力したデータ.Tagと比較することを考えていました。.Text

これは私のコードです:

Private Sub Form1_Load(ByVal sender as Object, byVal e as System.EventArgs)Handles MyBase.Load
    For Each ctr as Control in me.Controls
       if typeof ctr is TextBox then
         ctr.tag=ctr.text
       end if
    Next 
End Sub

これは、ユーザーが [キャンセル] をクリックしたときのコードです。

Private Sub CmdCancel_Click (ByVal sender as Object, ByVal e As System.EventArgs) Handles CmdCancel.Click
    For each ctr As Control in Me.Controls
        If Typeof ctr is Textbox then
           if ctr.tag.tostring <> ctr.text then
               MsgBox ("Do you want to save the items", YesNo)
           end if
        End if
    Next
End sub

これはこれを行う効果的な方法ですか?頼れるか?誰かがより良いアイデアを持っているなら、私はそれを聞きたい.

4

2 に答える 2