2

我有一个 Visual Studio、Visual Basic 表单,其中包括一个确定按钮和一个取消按钮。

我想要做的是让 OK 按钮保存用户选择的选项,当然还有 Cancel 按钮丢弃它们并将它们返回到以前的值。

但我注意到的是,当我调试表单时,无论我选择哪个按钮,值都会被保存。在表单的属性中,我已经声明 CancelBtn 确实是 CancelBtn 并且 OK 按钮是 OK 按钮,但是无论如何这些值仍然被保存。

有没有更好的方法来做我希望这个表格做的事情?

编辑:

这是到目前为止两个按钮的代码,都被设置为关闭窗口。AcceptOption 应该保存这些值,而 CancelOption 应该只是关闭表单。如果做得不好,我很抱歉,但我发现的常见问题解答只提到了更改每个按钮的属性,而没有提到代码。:

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

OK 和 Cancel 按钮没有什么神奇之处。它们只是……按钮。如果您在每次进行更改时保存数据,“取消”按钮不会神奇地“取消保存”它们。虽然如果您在 OK 按钮的 Click 事件处理程序中保存更改,那么单击 Cancel 按钮显然不会保存您的更改。为了进一步帮助您,我们需要了解您如何保存数据。

编辑:

通过查看您的代码,我认为您将数据直接传递到您的表单,而不执行对象的副本。因此,如果您修改此数据,它也会在父窗体中更改。通过使用此表单中的数据副本,任何未保存的更改都将被正确丢弃。

于 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 回答
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

我遇到了同样的问题。一旦我使用 My.Settings.Blabla = Blabla.value,即使我没有使用 My.Settings.Save(),它也会被保存,这使得 My.Settings.Save() 就我所知完全没有意义。

我最终接受了 Jordell 的建议:在用户单击“保存”按钮之前不要更改“值”,但我不太清楚如何去做。

我最终在我的所有设置子中使用了临时变量,而不是用户 My.Settings.UserConfigs。只有当我在 OK 潜艇时,我才打电话

My.Settings.UserConfigSetting = 临​​时_UserCofigValue

这是我正在处理的代码中的一个示例:

Private Sub btnOptionsThemeLB_Back_Update_Click(sender As System.Object, e As System.EventArgs) Handles btnOptionsThemeLB_Back_Update.Click
    If (tempOptionsThemeLB_Back = Nothing) Then
        tempOptionsThemeLB_Back = Me.btnOptionsThemeLB_Back.BackColor
    End If
    tempOptionsThemeLB_Back = RGBToColor(txtbOptionsThemeLB_Back_Red.Text, txtbOptionsThemeLB_Back_Green.Text, txtbOptionsThemeLB_Back_Blue.Text, tempOptionsThemeLB_Back)
    Me.btnOptionsThemeLB_Back.BackColor = tempOptionsThemeLB_Back
End Sub

只有使用 Ok 子程序,我才调用 My.Settings。

'Theme Section
My.Settings.colorBtnBack = tempOptionsThemeLB_Back
于 2017-06-08T08:48:19.060 回答