2012-02-01 72 views
2

我有一個Visual Studio,Visual Basic窗體包含一個確定按鈕和一個取消按鈕。Windows窗體取消按鈕不工作

我想要做的是有確定按鈕保存用戶選擇的選項,當然取消按鈕放棄它們,並返回到他們以前的值。

但是我注意到,當我調試窗體時,無論我選擇哪個按鈕,值都被保存。在表單的屬性上,我已經聲明CancelBtn確實是CancelBtn,確定按鈕是確定按鈕,但是值仍然保存,無論如何。

有沒有更好的方法來做我希望這個表單做的事情?

編輯:

這裏是到目前爲止的兩個按鈕的代碼,兩者都被設置爲關閉該窗口。 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

如果沒有您的代碼,我們不能幫您 – Akrem 2012-02-01 14:28:46

+0

您是否試過單步執行代碼以查看發生了什麼? – 2012-02-01 15:08:55

回答

2

不要更改「值」,直到用戶點擊保存按鈕。

表單應該預裝一份您想要更新的值的副本。

取消按鈕應該關閉表單。

保存按鈕應導致更新「值」,而不是窗體副本。

編輯: -

關於這個問題,有什麼不對,你已經發布的代碼。正確的處理程序被稱爲正確的按鈕點擊?表單的AcceptButtonCancelButton屬性是否設置爲正確的按鈕?

您的編輯控件綁定了哪些數據?

+0

好的,我想我可以跟着你。所以,幾乎所有的選項都要存儲在一組變量中,並且每次都要預先加載這些變量。當我想保存表單時,只需將表單值複製到預加載的變量中。 當我想丟棄表單時,簡單地不做任何事情。我只需要讓程序調用預製變量。 – 2012-02-01 15:07:12

+0

@保羅威廉姆斯,確切地說,就是這樣。所以表單可以傳遞值或在加載時讀取它們。 – Jodrell 2012-02-01 15:16:21

+0

原則上聽起來很容易,但是如何避免在選項部分中設置跨20或25個子集的任何值?是不是My.Settings.Save()是爲了?要基本上保存設置的用戶設置,只有當你使用它並銷燬它們,如果你不這樣做?如果沒有,它有什麼意義? – thebunnyrules 2017-06-08 07:47:04

1

確定和取消按鈕沒有什麼神奇的。他們只是...按鈕。如果每次進行更改時都保存數據,取消按鈕不會神奇地「解除」它們。雖然如果您將更改保存在OK按鈕的Click事件處理程序中,那麼單擊Cancel按鈕顯然不會保存您的更改。爲了進一步幫助您,我們需要知道您如何保存數據。

編輯:

從看你的代碼,我覺得你直接將數據傳遞到您的形式,不執行你的對象的副本。因此,如果您修改此數據,它也將在父表單中更改。通過使用此表單中的數據副本,任何未保存的更改都將被正確丟棄。

+0

好吧,現在我正在理解你的問題。在程序運行時,這些選項應該存儲到內存中。我沒有將它們保存到配置文件中。 – 2012-02-01 15:05:11

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 

它就是這麼簡單!

+1

除了更簡單和更正確的處理程序命名之外,我不明白這與問題有何不同。 – Jodrell 2012-02-01 15:17:53

+0

是的,與問題中的代碼相同,很好奇這個答案被接受了。 – 2012-02-01 15:29:49

+0

對不起。這個網站還是新手。 – 2012-02-01 15:37:28

1

如果你打開你的格式如

myForm.showdialog() 

你沒有定義關閉按鈕單擊事件處理程序,它會自動處理;只要設置'DialogResult'屬性按鈕

btnCancel.DialogResult = DialogResult.Cancel 

此外,如果你想關閉時ESC按下然後設置'CancelButton'屬性窗體的形式:

myForm.CancelButton = btnCancel 

在另一方面,如果你打開表格就好像

myForm.Show() 

你確實需要指定動作(s)在close bu tton click event here,即:

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

我遇到了同樣的問題。只要我使用My.Settings.Blabla = Blabla.value,它就會被保存,即使我沒有使用My.Settings.Save(),My.Settings.Save()完全沒有意義,據我所知。

我最終採取了Jordell的建議:不要更改「值」,直到用戶單擊保存按鈕但我不太清楚如何去解決它。

我最終在我的所有設置中使用了臨時變量而不是用戶My.Settings.UserConfigs。只有當我在確定子做我打電話

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 

而且只有withing的好子我打電話給My.Settings。

'Theme Section 
My.Settings.colorBtnBack = tempOptionsThemeLB_Back