我有一个Visual Studio,Visual Basic表单,其中包含一个OK按钮和一个Cancel按钮。
我想要做的是让OK按钮保存用户选择的选项,当然取消按钮会丢弃它们并将它们返回到之前的值。
但是我注意到的是,当我正在调试表单时,无论我选择哪个按钮,都会保存这些值。在表单的属性上,我已经声明确实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
答案 0 :(得分:2)
在用户点击“保存”按钮之前,请勿更改“值”。
表格应预先加载您想要更新的值的副本。
取消按钮应该关闭表单。
“保存”按钮应该更新“值”,而不是表单副本。
编辑: -
关于这个问题,您发布的代码没有任何问题。正确的按钮点击是否需要正确的处理程序?表单的AcceptButton
和CancelButton
属性是否设置为正确的按钮?
您的编辑控件绑定了哪些数据(如果有的话)?
答案 1 :(得分:1)
“确定”和“取消”按钮没什么神奇之处。他们只是......按钮。如果每次更改时都保存数据,则“取消”按钮不会神奇地“取消”它们。虽然如果在OK按钮的Click事件处理程序中保存更改,然后单击Cancel按钮显然不会保存您的更改。为了进一步帮助您,我们需要了解您如何保存数据。
编辑:
通过查看代码,我认为您将数据直接传递到表单,而不执行对象的副本。因此,如果您修改此数据,它也将在父表单中更改。通过使用此表单中的数据副本,任何未保存的更改都将被正确丢弃。
答案 2 :(得分:1)
取消按钮的事件处理程序应如下所示:
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
就这么简单!
答案 3 :(得分: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
答案 4 :(得分:1)
我遇到了同样的问题。一旦我使用My.Settings.Blabla = Blabla.value,它就会被保存,即使我还没有使用My.Settings.Save(),这使My.Settings.Save()尽可能无意义告诉。
我最终接受了Jordell的建议:不要改变"价值观"直到用户点击“保存”按钮,但对我来说,如何解决这个问题并不是很清楚。
我最终在我的所有设置中使用临时变量而不是用户My.Settings.UserConfigs。只有当我在OK子时,才打电话给
My.Settings.UserConfigSetting = temporary_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才能调用My.Settings。
'Theme Section
My.Settings.colorBtnBack = tempOptionsThemeLB_Back