中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Winform 對多個按鈕相同熱鍵時的處理

發布時間:2020-06-19 06:45:11 來源:網絡 閱讀:788 作者:arthurshan 欄目:編程語言

在Winform中我們可以通過在按鈕的名稱上使用&來給按鈕設置熱鍵。但是如果多個按鈕有相同的熱鍵時會發生什么呢?我們來做個實驗。

我們放三個按鈕并設置同樣的熱鍵,然后在每個按鈕的處理函數里使用MessageBox.Show來輸出自己的名稱,以此來說明哪個按鈕被觸發了。

Winform 對多個按鈕相同熱鍵時的處理

Winform 對多個按鈕相同熱鍵時的處理

運行程序后,按Alt+b你會發現彈出了button2的提示,按確定后沒再有別的提示。如下圖:

Winform 對多個按鈕相同熱鍵時的處理

這時你再讓button2獲取焦點后再按Alt+b試試,你會收到button3的提示。由此可以得出,Winform是根據當前的焦點位置和Tab順序來搜索下一個可觸發熱鍵的控件來處理的。要注意的是搜索的順序是從當前焦點的下一個控件開始到當前焦點的控件為止來搜索。

我們再做一個試驗,新建一個用戶控件,在這個用戶控件中我們添加一個按鈕,并將熱鍵設置為Alt+b。在后臺添加一個Sequence屬性,在控件的Load事件中將button的名稱上加上Sequence的值,在按鈕的Click事件中Show出按鈕的名稱以表示哪個按鈕被觸發。

Winform 對多個按鈕相同熱鍵時的處理

Winform 對多個按鈕相同熱鍵時的處理

用戶控制做好后我們將它添到我們的form上,放三個并依次將Sequence屬性改為1,2,3。

Winform 對多個按鈕相同熱鍵時的處理

運行后,我們將焦點定位到ucbutton1上后按Alt+b,你會發現提示uc&button1的消息。ucbutton2和uc&button3也是如此。

Winform 對多個按鈕相同熱鍵時的處理

那為什么會這樣呢?是不是Usercontorl有不同的處理呢?我們再來做個實驗吧。再新建一個用戶控件,添加3個按鈕設置相同的熱鍵,并添加后臺方法如下:

Winform 對多個按鈕相同熱鍵時的處理

Winform 對多個按鈕相同熱鍵時的處理

再將這個用戶控件添加到窗體中。

Winform 對多個按鈕相同熱鍵時的處理

運行程序后把焦點置于button3后按Alt+b你會收到uc2button1的提示,通過上面的結論這個是正確的。當你把焦點置于uc2button1時按Alt+b你會收到uc2button2的提示,當你把焦點置于uc2button3上時按Alt+b你會收到uc2button1的提示。

所以可以得出結論了。當焦點進入usercontrol之后Winform搜索下一個可觸發控件的范圍就限定在這個用戶控件內了。現在也可以理解第二個實驗為會ucbutton1~3會觸發當前按鈕的原因了,因為在用戶控件的范圍內只有一個熱鍵為Alt+b的控件。

不過我們正常情況下是不會遇到這個問題的,我是在一個form上加載多次同一個用戶控件時才遇到這個問題的。個人認為我們不應該依賴于Winform的這種搜索機制,而是自己多加處理來控制熱鍵的觸發邏輯,如通過Enable或Visable來保證熱鍵不沖突。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

萨嘎县| 庄浪县| 休宁县| 赤水市| 和顺县| 左权县| 五峰| 万盛区| 霍林郭勒市| 德格县| 东港市| 华池县| 九台市| 弋阳县| 海南省| 蓬安县| 阿克陶县| 华坪县| 克东县| 济宁市| 伊通| 平利县| 宕昌县| 井研县| 当阳市| 卢湾区| 昌平区| 宣威市| 青州市| 沙湾县| 田林县| 本溪市| 当雄县| 南昌市| 玉门市| 柘荣县| 阳山县| 太保市| 宝应县| 师宗县| 昌平区|