WinForm中的几个实用技巧汇总
作者:shichen2014 发布时间:2022-08-12 13:17:02
标签:WinForm
本文汇总了几个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程序设计可以带来很大帮助。


猜你喜欢
- 当一个产品或者项目由大量独立模块组成时,想要从 Git 挨个下载下来导入 IDE 查看并不容易,此时可以结合使用 Git 和 Maven 的
- 开发中,对于不经常使用英语的同学来说,对类,变量,方法想取一个合适的名字,此时发现自己的词汇早已还给老师 ,怎么办,这个插件能帮到你~一、安
- 在使用java项目时,如果没有详细的管理和辅助流程,就会像程序失去了系统的调配一样。在java中有一种专门管理项目的工具,叫做maven,除
- 本文实例展示了DevExpress获取TreeList可视区域节点集合的实现方法,是比较有实用价值的技巧。分享给大家供大家参考。具体实现方法
- Talk is cheap, show me the code!先来看代码:public class TestEval {public st
- 问题为了避免空指针调用,我们经常会看到这样的语句:if (someobject != null) { someob
- ApplicationContextAware 通过它Spring容器会自动把上下文环境对象调用ApplicationContex
- 当图像信息量较大,采用以上直接显示的方法,可能前面一部分显示后,显示后面一部分时,由于后面一部分还未从文件读出,使显示呈斑驳现象。为了提高显
- 全局变量顾名思义就是在整个的类中或者可在多个函数中调用的变量。也称为外部变量。局部变量则是特定过程或函数中可以访问的变量。声明一个变量是很
- 什么是线程同步? 当使用多个线程来访问同一个数据时,非常容易出现线程安全问题(比如多个线程都在操作同一数据导致数据不一致),所以我们用同步机
- 一、定义登录控制器目录结构代码:1、创建TUser类package com.demo.pojo;import lombok.AllArgsC
- 本文实例讲述了C#实现Zip压缩目录中所有文件的方法。分享给大家供大家参考。具体实现方法如下:using System;using Syst
- 前言泛型,一个孤独的守门者。大家可能会有疑问,我为什么叫做泛型是一个守门者。这其实是我个人的看法而已,我的意思是说泛型没有其看起来那么深不可
- 本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下首先来看一下我们要做成的而效果:主页面要显示一个view
- 本文实例讲述了C#使用委托实现的快速排序算法。分享给大家供大家参考。具体如下:class QuickSort { private dele
- 判断用户输入的是否至少含有N位小数。1.当用户输入的是非数字时抛出异常,返回false。2.当用户输入数字是,判断其数字是否至少含有N位小数
- package other;import java.security.MessageDigest;import java.security.
- 前言今天主要讲的是如何把通过接口获取到的Xml数据转换成(反序列化)我们想要的实体对象,当然Xml反序列化和Json反序列化的方式基本上都是
- Kotlin Flow在开发中的常用场景使用大家了解了 Flow 的创建与接收流程,了解 SharedFlow 创建的几种方式,各个参数的用
- 定义Java修饰符:修饰符用来定义类、方法或者变量,通常放在语句的最前端。分类主要分为2类:访问控制修饰符非访问控制修饰符访问控制修饰符可以