Кнопка отмены формы Windows не работает - PullRequest
2 голосов
/ 01 февраля 2012

У меня есть форма Visual Studio, Visual Basic, которая включает в себя кнопку ОК и кнопку Отмена.

Я хочу, чтобы кнопка ОК сохраняла параметры, выбранные пользователем, и, конечно, кнопку Отмена.кнопка, отбрасывающая их и возвращающая их к предыдущим значениям.

Но я замечаю, что при отладке формы значения сохраняются независимо от того, какую кнопку я выберу.В свойствах формы я объявил, что действительно 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

Ответы [ 5 ]

3 голосов
/ 01 февраля 2012

Не изменяйте «значения», пока пользователь не нажмет кнопку «Сохранить».

Форма должна быть предварительно загружена с копией значений, которые вы хотели бы обновить.

Кнопка Отмена должна просто закрыть форму.

Кнопка «Сохранить» должна вызывать обновление «значений», а не копии форм.

EDIT: -

В отношении этого вопроса нет ничего плохого в размещенном вами коде. Правильные обработчики вызываются для щелчков правой кнопкой? Свойства формы AcceptButton и CancelButton установлены для правильных кнопок?

С какими данными связаны ваши средства редактирования, если они вообще есть?

1 голос
/ 08 июня 2017

У меня были те же проблемы. Как только я использую My.Settings.Blabla = Blabla.value, он сохраняется, даже если я не использовал My.Settings.Save (), что делает My.Settings.Save () совершенно бессмысленным, насколько я могу судить.

В итоге я принял совет Джорделла: Не меняйте «значения», пока пользователь не нажмет кнопку «Сохранить» , но мне было не совсем понятно, как это сделать.

Я закончил тем, что использовал временные переменные во всех моих подпрограммах настроек вместо пользователя My.Settings.UserConfigs. Только когда я был в сабвуфере OK, я позвонил

My.Settings.UserConfigSetting = timer_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
1 голос
/ 22 июня 2012

Если вы открываете форму как

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
1 голос
/ 01 февраля 2012

Ваш обработчик события для кнопки отмены должен выглядеть следующим образом:

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

Это так же просто, какчто!

1 голос
/ 01 февраля 2012

В кнопках ОК и Отмена нет ничего волшебного. Они просто ... кнопки. Если вы сохраняете свои данные каждый раз, когда вносятся изменения, кнопка «Отмена» волшебным образом «не сохраняет» их. Хотя если вы сохраните изменения в обработчике событий Click кнопки OK, то нажатие кнопки «Отмена», очевидно, не сохранит ваши изменения. Чтобы помочь вам в дальнейшем, нам нужно знать, как вы сохраняете свои данные.

Edit:

Смотря на ваш код, я думаю, что вы передаете данные непосредственно в вашу форму, не выполняя копирование ваших объектов. Поэтому, если вы измените эти данные, они также будут изменены в родительской форме. При работе с копией ваших данных в этой форме любые изменения, которые не были сохранены, будут корректно отброшены.

...