-
C#教程之WinForm中的几个实用技巧汇总
本文汇总了几个WinForm中常见的实用技巧,对于C#程序开发有着很好的参考借鉴价值。具体分析如下:
一、屏蔽窗体右上角关闭按钮
1.重写OnClosing
1
2
3
4
5
6
7
8
9
10
|
protected override void OnClosing(CancelEventArgs e) { if ( this .Visible) { e.Cancel= true ; // // WHATE TODO // } } |
2.重写WndProc
1
2
3
4
5
6
7
8
9
10
11
12
|
protected override void WndProc( ref Message m) { const int WM_SYSCOMMAND = 0x0112; const int SC_CLOSE = 0xF060; if (m.Msg == WM_SYSCOMMAND && ( int ) m.WParam == SC_CLOSE) { // User clicked close button this .WindowState = FormWindowState.Minimized; return ; } base .WndProc( ref m); } |
更多方法可以参考:
http://topic.csdn.net/u/20091220/21/5228d0d6-26aa-48b8-81aa-293f7c7339f8.html?94449
http://topic.csdn.net/u/20090419/18/970d8ad9-ed9a-4bd9-a623-81d23106545b.html
二、屏蔽CTRL-V
在WinForm中的TextBox控件没有办法屏蔽CTRL-V的剪贴板粘贴动作,如果需要一个输入框,但是不希望用户粘贴剪贴板的内容,可以改用RichTextBox控件,并且在KeyDown中屏蔽掉CTRL-V键,例子:
1
2
3
4
5
|
private void richTextBox1_KeyDown( object sender, System.Windows.Forms.KeyEventArgs e) { if (e.Control && e.KeyCode==Keys.V) e.Handled = true ; } |
三、应用程序单例运行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#region 单实例运行 /// <summary> /// 单实例运行 /// </summary> /// <param name="frm">所要运行的主窗体</param> public static void SingleRun(Form frm) { System.Threading.Mutex mutex = new System.Threading.Mutex( false , "SINGLE_INSTANCE_MUTEX" ); if (!mutex.WaitOne(0, false )) { mutex.Close(); mutex = null ; } if (mutex != null ) { Application.Run(frm); } else { MessageBox.Show( "应用程序已启动" , "信息提示" ,MessageBoxButtons.OK,MessageBoxIcon.Information); } } #endregion |
四、将控件转换成圆形
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
#region 将控件转换为圆形 [System.Runtime.InteropServices.DllImport( "gdi32" )] private static extern IntPtr BeginPath(IntPtr hdc); [System.Runtime.InteropServices.DllImport( "gdi32" )] private static extern int SetBkMode(IntPtr hdc, int nBkMode); const int TRANSPARENT=1; [System.Runtime.InteropServices.DllImport( "gdi32" )] private static extern IntPtr EndPath(IntPtr hdc); [System.Runtime.InteropServices.DllImport( "gdi32" )] private static extern IntPtr PathToRegion(IntPtr hdc); [System.Runtime.InteropServices.DllImport( "gdi32" )] private static extern int Ellipse(IntPtr hdc, int x1, int y1, int x2, int y2); [System.Runtime.InteropServices.DllImport( "user32" )] private static extern IntPtr SetWindowRgn(IntPtr hwnd,IntPtr hRgn, bool bRedraw); [System.Runtime.InteropServices.DllImport( "user32" )] private static extern IntPtr GetDC(IntPtr hwnd); /// <summary> /// 将控件转为圆形 /// </summary> /// <param name="control">控件名</param> public static void MakeControlToCircle(Control[] control) { IntPtr dc; IntPtr region; for ( int i=0;i<control.Length;i++) { dc=GetDC(control[i].Handle); BeginPath(dc); SetBkMode(dc,TRANSPARENT); Ellipse(dc,0,0,control[i].Width-3,control[i].Height-2); EndPath(dc); region=PathToRegion(dc); SetWindowRgn(control[i].Handle,region, false ); } } #endregion |
五、在同一应用程序中同一窗体只打开一个
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
/// <summary> /// 在同一应用程序中同一窗体只打开一个 /// </summary> /// <param name="frmOpen">要打开的窗体实例</param> /// <returns></returns> public static void OpenSeamForm(Form frmOpen) { foreach (Form frm in Application.OpenForms) { if (frm.Text == frmOpen.Text) { frm.Visible = true ; frm.WindowState = FormWindowState.Normal; frm.Activate(); return ; } } frmOpen.Show(); } |
相信本文所述实例对大家WinForm程序设计可以带来很大帮助。
栏目列表
最新更新
python爬虫及其可视化
使用python爬取豆瓣电影短评评论内容
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比