WinForm中的几个实用技巧汇总
程序员文章站
2023-12-21 14:19:22
本文汇总了几个winform中常见的实用技巧,对于c#程序开发有着很好的参考借鉴价值。具体分析如下:
一、屏蔽窗体右上角关闭按钮
1.重写onclosing...
本文汇总了几个winform中常见的实用技巧,对于c#程序开发有着很好的参考借鉴价值。具体分析如下:
一、屏蔽窗体右上角关闭按钮
1.重写onclosing
protected override void onclosing(canceleventargs e) { if(this.visible) { e.cancel=true; // // whate todo // } }
2.重写wndproc
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); }
更多方法可以参考:
二、屏蔽ctrl-v
在winform中的textbox控件没有办法屏蔽ctrl-v的剪贴板粘贴动作,如果需要一个输入框,但是不希望用户粘贴剪贴板的内容,可以改用richtextbox控件,并且在keydown中屏蔽掉ctrl-v键,例子:
private void richtextbox1_keydown(object sender, system.windows.forms.keyeventargs e) { if(e.control && e.keycode==keys.v) e.handled = true; }
三、应用程序单例运行
#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
四、将控件转换成圆形
#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
五、在同一应用程序中同一窗体只打开一个
/// <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程序设计可以带来很大帮助。