轉帖|使用教程|編輯:龔雪|2024-09-06 15:05:19.910|閱讀 83 次
概述:本文主要介紹如何在WinForm程序中增加隱藏的按鍵處理來顯示一些特殊界面或者系統初始化操作 ,希望對大家有所啟示和幫助~
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
在之前曾見過對一個系統做初始化時,通過一組魔幻般的按鍵,調出來一個隱藏的系統設置界面,這個界面在常規的菜單或者工具欄是看不到的,因為它是一個后臺設置的關鍵界面,不公開,同時避免常規用戶的誤操作,它是作為一個超級管理員的入口功能,這個是很不錯的思路。其實WinForm做這樣的處理也是很容易實現的,本文將介紹WinForm中增加隱藏的按鍵處理功能。
PS:給大家推薦一個C#開發可以用到的界面組件——DevExpress WinForms,它能完美構建流暢、美觀且易于使用的應用程序,無論是Office風格的界面,還是分析處理大批量的業務數據,它都能輕松勝任!
DevExpress技術交流群10:532598169 歡迎一起進群討論
例如對于動態表和屬性配置的界面,不希望一般用戶看到,用戶只是可以對業務表的數據進行維護處理即可。那么我們可以把系統動態表和屬性配置的界面開發好,但是不直接放在菜單或者工具欄中。也就是我們完成功能的開發,但是不提供常規的調用入口即可。
例如對于下面的定義界面,我們開發好,測試正常后,移除通用的菜單或者工具欄操作入口。
而只是給一個常規的數據錄入管理界面,如下所示。
這樣可以防止普通用戶的誤操作,同時也可以把這些特殊的功能給一些特殊的用戶使用即可。
完成常規功能的開發后,我們需要增加隱藏的按鍵處理。
常規的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調出特殊隱藏的窗體了。
一般我們可以用于處理一些特殊的操作,如隱藏高級功能、隱藏系統危險初始化操作,一些關鍵記錄的管理等等。
本文轉載自
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: