轉(zhuǎn)帖|使用教程|編輯:龔雪|2024-09-06 15:05:19.910|閱讀 83 次
概述:本文主要介紹如何在WinForm程序中增加隱藏的按鍵處理來顯示一些特殊界面或者系統(tǒng)初始化操作 ,希望對(duì)大家有所啟示和幫助~
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
在之前曾見過對(duì)一個(gè)系統(tǒng)做初始化時(shí),通過一組魔幻般的按鍵,調(diào)出來一個(gè)隱藏的系統(tǒng)設(shè)置界面,這個(gè)界面在常規(guī)的菜單或者工具欄是看不到的,因?yàn)樗且粋€(gè)后臺(tái)設(shè)置的關(guān)鍵界面,不公開,同時(shí)避免常規(guī)用戶的誤操作,它是作為一個(gè)超級(jí)管理員的入口功能,這個(gè)是很不錯(cuò)的思路。其實(shí)WinForm做這樣的處理也是很容易實(shí)現(xiàn)的,本文將介紹WinForm中增加隱藏的按鍵處理功能。
PS:給大家推薦一個(gè)C#開發(fā)可以用到的界面組件——DevExpress WinForms,它能完美構(gòu)建流暢、美觀且易于使用的應(yīng)用程序,無論是Office風(fēng)格的界面,還是分析處理大批量的業(yè)務(wù)數(shù)據(jù),它都能輕松勝任!
DevExpress技術(shù)交流群10:532598169 歡迎一起進(jìn)群討論
例如對(duì)于動(dòng)態(tài)表和屬性配置的界面,不希望一般用戶看到,用戶只是可以對(duì)業(yè)務(wù)表的數(shù)據(jù)進(jìn)行維護(hù)處理即可。那么我們可以把系統(tǒng)動(dòng)態(tài)表和屬性配置的界面開發(fā)好,但是不直接放在菜單或者工具欄中。也就是我們完成功能的開發(fā),但是不提供常規(guī)的調(diào)用入口即可。
例如對(duì)于下面的定義界面,我們開發(fā)好,測(cè)試正常后,移除通用的菜單或者工具欄操作入口。
而只是給一個(gè)常規(guī)的數(shù)據(jù)錄入管理界面,如下所示。
這樣可以防止普通用戶的誤操作,同時(shí)也可以把這些特殊的功能給一些特殊的用戶使用即可。
完成常規(guī)功能的開發(fā)后,我們需要增加隱藏的按鍵處理。
常規(guī)的WinForm界面,如果需要接受按鍵的偵聽,需要設(shè)置窗體屬性 KeyPreview 為True。
然后跟蹤窗體的按鍵事件,包括按下去和彈上來的兩個(gè)事件進(jìn)行處理,就可以跟蹤到用戶按鍵的組合,從而根據(jù)特殊的組合進(jìn)行過濾處理即可。
//設(shè)置可以跟蹤按鍵 form.KeyPreview = true; //按鍵事件進(jìn)行跟蹤 form.KeyDown += (s, e) => {}; form.KeyUp += (s, e) => {};
有了這個(gè)思路,我們?cè)谝粋€(gè)輔助類中封裝一個(gè)方法,用來跟蹤兩組按鍵的處理,如下所示。
/// <summary> /// 用于記錄第一個(gè) Ctrl+Key(指定按鍵) 是否被按下 /// </summary> private bool IsFirstKeyPressed { get; set; } = false; /// <summary> /// 針對(duì)特殊的按鍵跟蹤處理, Ctrl+K 被按下,Ctrl+0按下,觸發(fā)某個(gè)特殊事件 /// </summary> public void InitSpecialKeyPress(Form form, Action action, Keys firstKey = Keys.K, Keys secondKey = Keys.D0) { form.KeyPreview = true;//設(shè)置可以跟蹤按鍵 form.KeyDown += (s, e) => { if (e.Control && e.KeyCode == firstKey) { e.SuppressKeyPress = true; // 禁止默認(rèn)處理 IsFirstKeyPressed = true; // 記錄 Ctrl+K 被按下 } else if (IsFirstKeyPressed && e.Control && e.KeyCode == secondKey) { e.SuppressKeyPress = true; // 禁止默認(rèn)處理 action(); // 如果Ctrl + K 然后 Ctrl + 0 被按下!執(zhí)行操作 IsFirstKeyPressed = false; // 重置 Ctrl+K 狀態(tài) } }; form.KeyUp += (s, e) => { // 如果松開了 Ctrl 或 K 鍵,則重置 Ctrl+A 狀態(tài) if (e.KeyCode == secondKey || e.KeyCode == Keys.ControlKey) { IsFirstKeyPressed = false; // 重置 Ctrl+K 狀態(tài) } }; }
我們注意到Action action,這個(gè)傳入一個(gè)匿名函數(shù)進(jìn)行處理符合條件按鍵的操作,因此可以變得通用很多。
因此我們?cè)谥鞔绑wMainForm的構(gòu)造函數(shù)中進(jìn)行按鍵事件的注冊(cè)處理即可。
/// <summary> /// 程序主界面 /// </summary> public partial class MainForm : RibbonForm { public MainForm() { InitializeComponent(); .... //針對(duì)特殊的按鍵跟蹤處理 Portal.gc.InitSpecialKeyPress(this, () => { //EAV屬性定義操作 ChildWinManagement.LoadMdiForm(this, typeof(FrmEntityTypeProperties)); }, Keys.K, Keys.D0); }
這樣,我們就可以通過隱藏的組合按鍵,Ctrl+K、Ctrl+0調(diào)出特殊隱藏的窗體了。
一般我們可以用于處理一些特殊的操作,如隱藏高級(jí)功能、隱藏系統(tǒng)危險(xiǎn)初始化操作,一些關(guān)鍵記錄的管理等等。
本文轉(zhuǎn)載自
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: