フォームを閉じるときに問題が発生し、何も変更されていない場合でもフォームを保存するよう求められます。私たちは複数のコントロールを持つフォームを持っています。データを持ついくつかの検索コンボボックスがあります。彼らは自分のデータを選択し、 "ビュー"と呼ばれるボタンをクリックします。次に、いくつかのテキストボックスとコンボボックスなどが表示され、データが入力されます。 RichEditControl
もロードされます。すべてのデータがロードイベントでロードされた後。最後の行は、次のメソッドを呼び出して、すべてのコントロールのイベントハンドラを設定することです。その後何かが変更された場合は、フォームの終了時に保存を促します。RichEditControlイベントハンドラ、フォームの終了時に何も保存せずに保存するように変更しました
customFunc.AddDirtyEvent(Me)
リッチテキストボックスがない場合は問題あり、テストしています。フォーム上の唯一のコントロールがRichEditControl
の場合、ロード時に何も変更されていなくても、何があっても保存するように常に求められます。 RichEditControl
のフォームがあり、フォームの読み込み時にデータが取り込まれることに気付きました。それ以降のイベントハンドラを呼び出しても、イベントハンドラの呼び出しをフォームのイベントに追加すると保存するように求められますが、ダーティビットを再び設定しないため動作しているようです。ほとんどのイベントは、フォームロードイベントの最後にキューされています。しかし、それが示されたイベントに行くと、呼び出しが行われ、ダーティービットは真にリセットされません。
すべてのデータをロードして、RichEditControl
を生成するボタン「ビュー」があるため、問題が発生した場合は、表示されたイベントを使用できません。したがって、同じメソッドでデータがロードされた後にイベントハンドラを追加しても、常にダーティビットをtrueに設定するように戻ります。この後に汚れたビットをfalse
にしておく必要があります。変更がなく、単にデータを表示したい場合は、フォームの終了時に保存するように求めるメッセージは表示されません。以下は私のコードです。 RichEditControl.Modified
プロパティのためのあなたのSetIsDirty
方法のチェックで
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
私はDevExpress社のコントロールを持っていないが、私は通常のRichTextBoxコントロールの問題を複製することはできません。フォームが読み込まれた後に何かがテキストを変更している可能性があります。代わりに 'customFunc.AddDirtyEvent(Me)'をボタンクリックから手動で呼び出してテストしてみてください。 – LarsTech
はい私たちはdevexpressコントロールを使用しています13.2 – Sirus
RichEditControlでデータをロードした後に変数is_Dirty = Falseに影響していると理解していれば –