WinForm中的几个实用技巧汇总
本文汇总了几个WinForm中常见的实用技巧,对于C#程序开发有着很好的参考借鉴价值。具体分析如下:
一、屏蔽窗体右上角关闭按钮
1.重写OnClosing
protectedoverridevoidOnClosing(CancelEventArgse)
{
if(this.Visible)
{
e.Cancel=true;
//
//WHATETODO
//
}
}
2.重写WndProc
protectedoverridevoidWndProc(refMessagem)
{
constintWM_SYSCOMMAND=0x0112;
constintSC_CLOSE=0xF060;
if(m.Msg==WM_SYSCOMMAND&&(int)m.WParam==SC_CLOSE)
{
//Userclickedclosebutton
this.WindowState=FormWindowState.Minimized;
return;
}
base.WndProc(refm);
}
更多方法可以参考:
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键,例子:
privatevoidrichTextBox1_KeyDown(objectsender,System.Windows.Forms.KeyEventArgse)
{
if(e.Control&&e.KeyCode==Keys.V)
e.Handled=true;
}
三、应用程序单例运行
#region单实例运行
///<summary>
///单实例运行
///</summary>
///<paramname="frm">所要运行的主窗体</param>
publicstaticvoidSingleRun(Formfrm)
{
System.Threading.Mutexmutex=newSystem.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")]
privatestaticexternIntPtrBeginPath(IntPtrhdc);
[System.Runtime.InteropServices.DllImport("gdi32")]
privatestaticexternintSetBkMode(IntPtrhdc,intnBkMode);
constintTRANSPARENT=1;
[System.Runtime.InteropServices.DllImport("gdi32")]
privatestaticexternIntPtrEndPath(IntPtrhdc);
[System.Runtime.InteropServices.DllImport("gdi32")]
privatestaticexternIntPtrPathToRegion(IntPtrhdc);
[System.Runtime.InteropServices.DllImport("gdi32")]
privatestaticexternintEllipse(IntPtrhdc,intx1,inty1,intx2,inty2);
[System.Runtime.InteropServices.DllImport("user32")]
privatestaticexternIntPtrSetWindowRgn(IntPtrhwnd,IntPtrhRgn,boolbRedraw);
[System.Runtime.InteropServices.DllImport("user32")]
privatestaticexternIntPtrGetDC(IntPtrhwnd);
///<summary>
///将控件转为圆形
///</summary>
///<paramname="control">控件名</param>
publicstaticvoidMakeControlToCircle(Control[]control)
{
IntPtrdc;
IntPtrregion;
for(inti=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>
///<paramname="frmOpen">要打开的窗体实例</param>
///<returns></returns>
publicstaticvoidOpenSeamForm(FormfrmOpen)
{
foreach(FormfrminApplication.OpenForms)
{
if(frm.Text==frmOpen.Text)
{
frm.Visible=true;
frm.WindowState=FormWindowState.Normal;
frm.Activate();
return;
}
}
frmOpen.Show();
}
相信本文所述实例对大家WinForm程序设计可以带来很大帮助。