WinForm中的几个实用技巧汇总

所属分类: 软件编程 / C#教程 阅读数: 79
收藏 0 赞 0 分享

本文汇总了几个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);
}

更多方法可以参考:
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键,例子:

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程序设计可以带来很大帮助。

更多精彩内容其他人还在看

C#抽象类与抽象方法详解

这篇文章主要为大家详细介绍了C#抽象类与抽象方法的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

C#代码实现扑克牌排序的几种方式

今天小编就为大家分享一篇关于C#代码实现扑克牌排序,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C#泛型概念的简介与泛型的使用

今天小编就为大家分享一篇关于C#泛型概念的简介与泛型的使用,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C# 7.0 使用下划线忽略使用的变量的原因分析

这篇文章主要介绍了C# 7.0 使用下划线忽略使用的变量的原因浅析,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

C# 中使用正则表达式匹配字符的含义

正则表达式的作用用来描述字符串的特征。本文重点给大家介绍C# 中使用正则表达式匹配字符的含义,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
收藏 0 赞 0 分享

C# Dictionary和SortedDictionary的简介

今天小编就为大家分享一篇关于C# Dictionary和SortedDictionary的简介,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C#中SQL Command的基本用法

今天小编就为大家分享一篇关于C#中SQL Command的基本用法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C#使用SQL DataReader访问数据的优点和实例

今天小编就为大家分享一篇关于C#使用SQL DataReader访问数据的优点和实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C#使用SQL Dataset数据集代码实例

今天小编就为大家分享一篇关于的文章,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

C#使用SQL DataAdapter数据适配代码实例

今天小编就为大家分享一篇关于C#使用SQL DataAdapter数据适配代码实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享
查看更多