1. 程式人生 > 其它 >WinForm之 AcceptButton和CancelButton

WinForm之 AcceptButton和CancelButton

領導review我程式碼時說,像這類WinForm窗體,如果有確認或者取消按鈕時要為窗體設定 AcceptButton和CancelButton。

好像之前的工作中都沒咋用過這玩意,這是啥屬性呀,去瀏覽了MSDN中關於這兩個屬性的介紹 https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.form.acceptbutton?view=netframework-4.5

大概作用就是 當用戶在該介面下按下 Enter 鍵和ESC鍵時去自動去觸發 AcceptButton和CancelButton屬性裡設定的按鈕。但對於AcceptButton屬性使用Enter觸發,在焦點處於介面其他控制元件上時可能會導致觸發設定的按鈕失效,文件裡以多行文字框處於焦點做了舉例。

本文主要是以案例的形式說一下這兩個屬性,在MSDN文件中沒介紹的內容。我們知道當窗體以ShowDialog方式顯示時,窗體關閉後會返回一個DialogResult列舉型別的結果(預設是DialogResult.None)。AcceptButton和CancelButton屬性在這種情況存在一些區別。

點選Form1的按鈕以ShowDialog方式開啟Form2窗體後按下 Enter 按鍵,啥反應也沒有,按下 ESC 鍵後,窗體關閉了,彈出返回值 Cancel。

說明 CancelButton設定的按鈕觸發後會設定窗體DialogResult為 DialogResult.Cancel,而AcceptButton什麼都不會做。

為了避免是按下 Enter 鍵沒觸發按鈕的懷疑,增加按鈕事件後,發現 MessageBox框的確顯示了。

所以如果窗體是以模態窗體的形式展示並設定了 AcceptButton屬性時如果希望自動關閉窗體需要新增按鈕事件,在按鈕事件中明確告訴程式希望返回那種狀態。例如下圖所示: