網站首頁 編程語言 正文
在C#中怎樣禁用鼠標按鍵,我們可以通過ImessageFilter接口下的PreFilterMessage方法、Application類的AddMessageFilter方法,RemoveMessageFilter方法和Message結構的Msg屬性來禁用鼠標左鍵。Message結構包裝Windows發送的消息,可使用該結構包裝消息,并將其分配給窗口過程以進行調度,還可以使用該結構獲取系統向應用程序或控件發送的關于某個消息的信息。
使用PreFilterMessage方法在調度消息之前將其篩選出來。語法格式如下:?
Bool PreFilterMessage(ref Message m)
參數說明:
- m:要調度的消息,無法修改此消息。
- 返回值:如果篩選消息并禁止消息被調度,則為True;如果允許消息繼續到達下一個篩選器或控件,則為False。使用AddMessageFilter方法添加消息篩選器以便在向目標傳送Windows消息時監視這些消息。使RemoveMessageFilter?從應用程序的消息泵移除一個消息篩選器。
示例一:在ComboBox選擇值的時候,選擇的值會隨鼠標滾輪的滑動而改變,有時候不小心滑動了滑輪,導致選擇的值改變,在下面的示例中,通過禁用鼠標滾輪,防止鼠標滾輪的滑動改變ComboBox選擇的值。
界面:
代碼實現:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace MouseDemo { public partial class FrmMain : Form,IMessageFilter { public FrmMain() { InitializeComponent(); } public bool PreFilterMessage(ref Message m) { if (m.Msg == 522) { return true; } else { return false; } } ////// 窗體加載 /// /// /// private void FrmMain_Load(object sender, EventArgs e) { InitComboBox(); } ////// 初始化ComboBox /// private void InitComboBox() { DictionarydictGrade = new Dictionary (); dictGrade.Add(1, "一年級"); dictGrade.Add(2, "二年級"); dictGrade.Add(3, "三年級"); dictGrade.Add(4, "四年級"); dictGrade.Add(5, "五年級"); dictGrade.Add(6, "六年級"); BindingSource dataSource = new BindingSource(); dataSource.DataSource = dictGrade; cmb_Grade.DataSource = dataSource; cmb_Grade.DisplayMember = "Value"; cmb_Grade.ValueMember = "Key"; } /// /// 索引改變事件 /// /// /// private void cmb_Grade_SelectedIndexChanged(object sender, EventArgs e) { //添加消息過濾 Application.AddMessageFilter(this); } } }
示例二:窗體設置右鍵控件,演示禁用和解除禁用右鍵功能,右鍵菜單只有復制、剪切、粘貼三項
界面:
代碼:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace MouseRightDemo { public partial class FrmMouseRight : Form ,IMessageFilter { public FrmMouseRight() { InitializeComponent(); } ////// 實現方法 /// /// ///public bool PreFilterMessage(ref Message m) { //不響應鼠標右鍵 if (m.Msg >= 516 && m.Msg <= 517) { return true; } else { return false; } } /// /// 禁用鼠標右鍵 /// /// /// private void button1_Click(object sender, EventArgs e) { //添加消息 Application.AddMessageFilter(this); MessageBox.Show("鼠標右鍵已被禁止使用", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } ////// 解決禁用鼠標右鍵 /// /// /// private void button2_Click(object sender, EventArgs e) { //移除消息 Application.RemoveMessageFilter(this); MessageBox.Show("鼠標右鍵已被解除禁止使用,可以使用鼠標右鍵", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } } }
鼠標動作常見參數:
鼠標移動:512
鼠標左鍵:
down:513 up:514
double click:515
鼠標右鍵:
down:516 up:517
鼠標滾輪:522
原文鏈接:https://www.cnblogs.com/dotnet261010/p/6691332.html
相關推薦
- 2022-12-31 Android入門之IntentService的使用教程詳解_Android
- 2022-09-03 Nginx文件已經存在全局反向代理問題排查記錄_nginx
- 2022-08-02 C#如何Task執行任務,等待任務完成_C#教程
- 2023-06-18 一文告訴你大神是如何學習Go語言之make和new_Golang
- 2024-03-09 【Redis】什么是緩存雪崩,如何預防緩存雪崩?
- 2022-07-22 如何快速刪除node_modules目錄方法詳解
- 2023-07-24 E6新語法for of 和ES3的for in 有什么區別?useState為什么是用數組結構而不用
- 2023-12-18 IllegalArgumentException異常產生原因及解決方案
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支