2

[OK] ボタンと [キャンセル] ボタンを含む Visual Studio、Visual Basic フォームがあります。

私がやりたいことは、OK ボタンでユーザーが選択したオプションを保存し、もちろんキャンセル ボタンでそれらを破棄して以前の値に戻すことです。

しかし、フォームをデバッグしているときに、選択しているボタンに関係なく値が保存されていることに気付きました。フォームのプロパティで、実際に CancelBtn が CancelBtn であり、OK ボタンが OK ボタンであることを宣言しましたが、値は関係なく保存されています。

このフォームでやりたいことを行うためのより良い方法はありますか?

編集:

これまでの 2 つのボタンのコードは次のとおりです。どちらもウィンドウを閉じるように設定されています。AcceptOption は値を保存し、CancelOption はフォームを閉じるだけです。これがうまくできていない場合は申し訳ありませんが、私が見つけた FAQ には、各ボタンのプロパティを変更することしか言及されておらず、コードについては何も言及されていません。

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles AcceptOptionBtn.Click
    ' Save the Options
    Me.Close()
    ' Close the form
End Sub

Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles CancelOptionBtn.Click
    ' Close the form
    Me.Close()
End Sub
4

5 に答える 5

3

ユーザーが [保存] ボタンをクリックするまで、「値」を変更しないでください。

フォームには、更新したい値のコピーがプリロードされている必要があります。

キャンセルボタンはフォームを閉じるだけです。

[保存] ボタンをクリックすると、フォームのコピーではなく、「値」が更新されます。

編集:-

この質問に関しては、投稿したコードに問題はありません。右のボタン クリックに対して適切なハンドラーが呼び出されていますか? フォームAcceptButtonCancelButtonプロパティは正しいボタンに設定されていますか?

編集コントロールがバインドされている場合、どのデータにバインドされていますか?

于 2012-02-01T15:02:35.363 に答える
1

次のようにフォームを開くと

myForm.showdialog()

閉じるボタンのクリック イベントのハンドラーを定義する必要はありません。自動的に処理されます。'DialogResult'ボタンのプロパティを設定するだけです

btnCancel.DialogResult = DialogResult.Cancel

ESCまた、が押されたときにフォームを閉じたい場合は'CancelButton'、フォームのプロパティを設定します。

myForm.CancelButton = btnCancel

一方、次のようにフォームを開くと

myForm.Show()

ここに示すように、閉じるボタンのクリック イベントで実行するアクションを指定する必要があります。

Private Sub BtnCancelClick(ByVal sender As System.Object, ByVal e As EventArgs) Handles btnCancel.Click
     Close()
End Sub
于 2012-06-21T20:37:14.163 に答える
1

[OK] ボタンと [キャンセル] ボタンに魔法のようなものは何もありません。それらはただの...ボタンです。変更が行われるたびにデータを保存すると、[キャンセル] ボタンは魔法のようにデータを「保存解除」しません。ただし、[OK] ボタンの Click イベント ハンドラーで変更を保存した場合、[キャンセル] ボタンをクリックしても変更は保存されません。さらに支援するには、データの保存方法を知る必要があります。

編集:

コードを見ると、オブジェクトのコピーを実行せずに、データをフォームに直接渡していると思います。したがって、このデータを変更すると、親フォームでも変更されます。このフォームでデータのコピーを操作することにより、保存されていない変更は正しく破棄されます。

于 2012-02-01T15:03:09.920 に答える
1

キャンセル ボタンのイベント ハンドラーは次のようになります。

Private Sub btnCancel_Click(sender As System.Object, e As System.EventArgs) Handles btnCancel.Click
    Me.Close()
End Sub

[OK] ボタンのイベント ハンドラーは次のようになります。

Private Sub btnOK_Click(sender As System.Object, e As System.EventArgs) Handles btnOK.Click
    SaveSettings 'call a routine to save the settings the user has entered
    Me.Close()
End Sub

それはそれと同じくらい簡単です!

于 2012-02-01T15:04:56.843 に答える