以前,我看到一個朋友在對一個系統做初始化的時候,通過一組魔幻般的按鍵,調出來一個隱藏的系統設置界面,這個界面在常規的菜單或者工具欄是看不到的,因為它是一個後臺設置的關鍵界面,不公開,同時避免常規用戶的誤操作,它是作為一個超級管理員的入口功能,這個是很不錯的思路。其實Winform做這樣的處理也是很容... ...
以前,我看到一個朋友在對一個系統做初始化的時候,通過一組魔幻般的按鍵,調出來一個隱藏的系統設置界面,這個界面在常規的菜單或者工具欄是看不到的,因為它是一個後臺設置的關鍵界面,不公開,同時避免常規用戶的誤操作,它是作為一個超級管理員的入口功能,這個是很不錯的思路。其實Winform做這樣的處理也是很容易的實現的,本篇隨筆來介紹Winform中增加隱藏的按鍵處理的功能。
1、準備好相關的界面功能
例如,我對於動態表和屬性配置的界面,不希望一般用戶看到,用戶只是可以對業務表的數據進行維護處理即可。那麼我們可以把系統動態表和屬性配置的界面開發好,但是不直接放在菜單或者工具欄中。也就是我們完成功能的開發,但是不提供常規的調用入口即可。
例如對於下麵的定義界面,我們開發好,測試正常後,移除通用的菜單或者工具欄操作入口。
而只是給一個常規的數據錄入管理界面,如下所示。
這樣可以防止普通用戶的誤操作,同時也可以把這些特殊的功能給一些特殊的用戶使用即可。
2、 在Winform程式中增加隱藏的按鍵處理
完成常規功能的開發後,我們需要增加隱藏的按鍵處理。
我們知道,常規的Winform界面,如果需要接受按鍵的偵聽,需要設置窗體屬性 KeyPreview 為True。
然後跟蹤窗體的按鍵事件,包括按下去,和彈上來的兩個事件進行處理,就可以跟蹤到用戶按鍵的組合,從而根據特殊的組合進行過濾處理即可。
//設置可以跟蹤按鍵 form.KeyPreview = true; //按鍵事件進行跟蹤 form.KeyDown += (s, e) => {}; form.KeyUp += (s, e) => {};
有了這個思路,我們在一個輔助類中封裝一個方法,用來跟蹤兩組按鍵的處理,如下所示。
/// <summary> /// 用於記錄第一個 Ctrl+Key(指定按鍵) 是否被按下 /// </summary> private bool IsFirstKeyPressed { get; set; } = false; /// <summary> /// 針對特殊的按鍵跟蹤處理, Ctrl+K 被按下,Ctrl+0按下,觸發某個特殊事件 /// </summary> public void InitSpecialKeyPress(Form form, Action action, Keys firstKey = Keys.K, Keys secondKey = Keys.D0) { form.KeyPreview = true;//設置可以跟蹤按鍵 form.KeyDown += (s, e) => { if (e.Control && e.KeyCode == firstKey) { e.SuppressKeyPress = true; // 禁止預設處理 IsFirstKeyPressed = true; // 記錄 Ctrl+K 被按下 } else if (IsFirstKeyPressed && e.Control && e.KeyCode == secondKey) { e.SuppressKeyPress = true; // 禁止預設處理 action(); // 如果Ctrl + K 然後 Ctrl + 0 被按下!執行操作 IsFirstKeyPressed = false; // 重置 Ctrl+K 狀態 } }; form.KeyUp += (s, e) => { // 如果鬆開了 Ctrl 或 K 鍵,則重置 Ctrl+A 狀態 if (e.KeyCode == secondKey || e.KeyCode == Keys.ControlKey) { IsFirstKeyPressed = false; // 重置 Ctrl+K 狀態 } }; }
我們註意到Action action,這個傳入一個匿名函數進行處理符合條件按鍵的操作,因此可以變得通用很多。
因此我們在主窗體MainForm的構造函數中進行按鍵事件的註冊處理即可。
/// <summary> /// 程式主界面 /// </summary> public partial class MainForm : RibbonForm { public MainForm() { InitializeComponent(); .... //針對特殊的按鍵跟蹤處理 Portal.gc.InitSpecialKeyPress(this, () => { //EAV屬性定義操作 ChildWinManagement.LoadMdiForm(this, typeof(FrmEntityTypeProperties)); }, Keys.K, Keys.D0); }
這樣,我們就可以通過隱藏的組合按鍵,Ctrl+K, Ctrl+0調出我們特殊隱藏的窗體了。
一般我們可以用於處理一些特殊的操作,如隱藏高級功能、隱藏系統危險初始化操作,一些關鍵記錄的管理等等。
專註於代碼生成工具、.Net/.NetCore 框架架構及軟體開發,以及各種Vue.js的前端技術應用。著有Winform開發框架/混合式開發框架、微信開發框架、Bootstrap開發框架、ABP開發框架、SqlSugar開發框架等框架產品。
轉載請註明出處:撰寫人:伍華聰 http://www.iqidi.com