0

だから、誰かが私に何かをする方法を教えてくれるかどうか疑問に思っています。アプリケーションに tabControl があります。約 25 ~ 30 個のフィールドを持つページ (TabPage1) をロードします。すべてのデータをロードすると、ループを実行して各コントロール値を .tag に保存します。基本的に各コントロールの ctr.tag.tostring <> ctr.text をチェックする isDirty() という関数もあります。フォーム上のすべてのコントロールをチェックするためのクイック ハンドラーを作成する方法を理解するのに苦労しています。TagPage1.Validating を使用してみましたが、何もしません。

私の isDirty() 関数は次のようになります...

    Private Function isDirty() As Boolean

    isDirty = False

    For Each ctr As Control In TabPage1.Controls
        If TypeOf ctr Is TextBox And ctr.Enabled = True Then
            If ctr.Tag.ToString <> ctr.Text Then
                isDirty = True
            End If
        End If
        'more if statements for comboboxes and such
      Next
    End Function

この関数をどこかにプラグインして、次のように CALL を実行できることを望んでいます

 if isDirty() then
    MsgBox "You have made a change to this form"
 End if

コントロールの選択が変更されるたびにこれを呼び出す必要がありますか?

4

1 に答える 1

1

2つのアプローチがあります

  1. ほとんどのコントロールに変更イベント ハンドラーがない場合、あなたのアプローチは正しいようです。ところで、上記のコードではExit For, afterを見逃していましたisDirty = True
  2. ほとんどのコントロールが実装されたイベント ハンドラーを変更した場合 (これは、デザインにデータ モデル/オブジェクトがある場合に当てはまります)、ループ内で変更をチェックするのではなく、いつ変更が行われたかをチェックすることをお勧めします。つまり、フォーム レベル変数を宣言しますbool changedtextboxcomboboxradiobutton、などのコントロールには、変更が に設定されてcheckboxいる場合、ほとんどの場合、変更イベント ハンドラーがあります。changedTrue
于 2016-11-18T05:06:11.120 に答える