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