zoukankan      html  css  js  c++  java
  • WinForm中的几个小技巧

    屏蔽窗体右上角关闭按钮

    一、重写OnClosing

    protected override voidOnClosing(CancelEventArgs e)

    {

        if(this.Visible)

       {

            e.Cancel=true;

    //

     // WHATE TODO 

     //

       }

    }

    二、重写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>

            /// <paramname="frm">所要运行的主窗体</param>

            public static voidSingleRun(Form frm)

            {

               System.Threading.Mutex mutex = 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")]

      privatestatic extern IntPtr BeginPath(IntPtr hdc);

      [System.Runtime.InteropServices.DllImport("gdi32")]

      privatestatic extern int SetBkMode(IntPtr hdc,int nBkMode);  

      constint TRANSPARENT=1;

      [System.Runtime.InteropServices.DllImport("gdi32")]     

      privatestatic extern IntPtr EndPath(IntPtr hdc);

      [System.Runtime.InteropServices.DllImport("gdi32")]

      privatestatic extern IntPtr PathToRegion(IntPtr hdc);

      [System.Runtime.InteropServices.DllImport("gdi32")]

      privatestatic extern int Ellipse(IntPtr hdc,int x1,int y1,int x2,int y2);

      [System.Runtime.InteropServices.DllImport("user32")]

      privatestatic extern IntPtr SetWindowRgn(IntPtr hwnd,IntPtr hRgn,bool bRedraw);

      [System.Runtime.InteropServices.DllImport("user32")]

      privatestatic extern IntPtr GetDC(IntPtr hwnd);

      ///<summary>

      ///将控件转为圆形

      ///</summary>

      ///<param name="control">控件名</param> 

      publicstatic void MakeControlToCircle(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>

           /// <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();

           }

    源文档 <http://www.cnblogs.com/08shiyan/archive/2010/07/16/1628565.html>

    不管遇到什么样的困难,一定要坚持,即便是嘴里唠叨着累、烦、想放弃,心里还是要默默的给自己说:再试试看再坚持一次。等时间时间久了回头看看原来自己战胜了很多次,原来自己是可以的,坚持坚持就好了。
  • 相关阅读:
    HDU1862 EXCEL排序
    结构体+字符串比较大小(HDU1234开门人和关门人 )
    两个大数字相加
    Ksusha and Array (vector)
    Ksenia and Pan Scales(思维题)
    最大公约数问题(Wolf and Rabbit )
    HDU2044一只小蜜蜂(递推)
    HDU2043密码
    基础贪心算法(HDU2037今年暑假不AC)
    c# winform 关于DataGridView的一些操作(很全,绝对够用)
  • 原文地址:https://www.cnblogs.com/hexiaoping/p/1812982.html
Copyright © 2011-2022 走看看