Vb.net Windows窗体取消按钮不工作

Vb.net Windows窗体取消按钮不工作,vb.net,visual-studio-2010,cancel-button,acceptbutton,Vb.net,Visual Studio 2010,Cancel Button,Acceptbutton,我有一个visualstudio,visualbasic表单,它包括一个OK按钮和一个Cancel按钮 我想做的是让OK按钮保存用户选择的选项,当然还有Cancel按钮放弃它们并将它们返回到以前的值 但我注意到,在调试表单时,无论选择哪个按钮,都会保存值。在表单的属性上,我声明CancelBtn确实是CancelBtn,OK按钮是OK按钮,但是不管怎样,值仍然被保存 是否有更好的方法来完成我希望此表单完成的操作 编辑: 这是迄今为止两个按钮的代码,它们都被设置为关闭窗口。AcceptOption

我有一个visualstudio,visualbasic表单,它包括一个OK按钮和一个Cancel按钮

我想做的是让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
在用户单击“保存”按钮之前,不要更改“值”

表单应预加载您要更新的值的副本

取消按钮应该只是关闭表单

保存按钮应导致更新“值”,而不是表单副本

编辑:-

关于这个问题,你发布的代码没有问题。是否为右键单击调用了正确的处理程序?表单的
AcceptButton
CancelButton
属性是否设置为正确的按钮


编辑控件绑定到哪些数据?如果有的话?

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

编辑:


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

取消按钮的事件处理程序应如下所示:

Private Sub btnCancel_Click(sender As System.Object, e As System.EventArgs) Handles btnCancel.Click
    Me.Close()
End Sub
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

“确定”按钮的事件处理程序应如下所示:

Private Sub btnCancel_Click(sender As System.Object, e As System.EventArgs) Handles btnCancel.Click
    Me.Close()
End Sub
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

就这么简单

如果你像这样打开表单

myForm.showdialog()
myForm.Show()
您不必为close button click事件定义处理程序,它是自动处理的;只需为按钮设置
'DialogResult'
属性

btnCancel.DialogResult = DialogResult.Cancel
另外,如果要在按下ESC时关闭表单,请为表单设置
'CancelButton'
属性:

myForm.CancelButton = btnCancel
另一方面,如果你像这样打开表单

myForm.showdialog()
myForm.Show()
您确实需要指定对关闭按钮单击事件执行的操作,如此处所示,即:

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

我也有同样的问题。只要我使用My.Settings.Blabla=blablabla.value,它就会被保存,即使我没有使用我的.Settings.Save(),这就使得我的.Settings.Save()毫无意义

最后我接受了Jordell的建议:在用户单击“保存”按钮之前不要更改“值”,但我不太清楚该怎么做

最后,我在所有设置子项中使用临时变量,而不是在用户my.settings.UserConfigs中使用临时变量。只有当我在OK潜水艇时我才打电话

My.Settings.UserConfigSetting=临时\u 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 sub,我才调用我的设置

'Theme Section
My.Settings.colorBtnBack = tempOptionsThemeLB_Back

如果没有一些代码,我们无法帮助您。您是否尝试过单步查看代码以了解发生了什么?好的,现在我理解了您的问题。程序运行时,选项应存储在内存中。我不会将它们保存到配置文件中。好的,我想我可以在这方面跟你说。因此,将我想要更改的选项存储在一组变量中,并让表单每次预加载这些变量。当我想要保存表单时,只需将表单值复制到预加载的变量中。当我想放弃表单时,简单的什么都不做。我只需要让程序调用预制变量。@Paul Williams,没错,就是这样。因此,表单可以传递值,也可以在加载时读取值。原则上听起来很简单,但如何避免在选项部分设置20或25个子节点上的任何值?这不是我的.Settings.Save()的目标吗?基本上只在使用时保存设置用户设置,不使用时销毁它们?如果没有,那有什么意义呢?@thebunnyrules,1。不要编写这样做的代码。2.My.Settings对象提供对应用程序设置的访问。不知道这有什么关系。我看不出这与问题有什么不同,除了处理程序的命名更简单、更正确。是的,与问题中的代码相同,奇怪的是这个答案被接受了。很抱歉。对这个网站来说还是新的。@Jodrell-这个问题是在我发布了这个包含代码摘录的文章一分钟后编辑的。