Winform控件开发(1)——Label(史上最全)

发布时间:2025-12-09 14:13:47 浏览次数:4

作用:一般用于显示文本或者作为”按钮使用”,当作为显示文本使用时,通过设置label的Text属性实现,当作为“按钮使用时”,在lable的单击事件下注册事件即可,下面详细介绍label的属性以及事件:
一、属性
1、Name属性,该属性代表label类对象的名称,通过该属性可以获取到该label对象,如下图:

该label对象名称为label1,当然也可以更改为其他名称
2、AllowDrop属性,该属性的值是指示控件是否接受用户拖放文件的数据,具体指某个文件的全路径,具体操作过程以及代码如下:

private void label1_DragOver(object sender, DragEventArgs e)
{

e.Effect = DragDropEffects.Copy;
Console.WriteLine(1);
}
private void label1_DragDrop(object sender, DragEventArgs e)
{

if (e.Data.GetDataPresent(DataFormats.FileDrop))
{

label1.Text = ((string[])e.Data.GetData(DataFormats.FileDrop))[0];
}
3、Anchor属性,当窗体的大小发生改变时,label是否绑定父容器的边缘(当都不绑定时,label随着窗体大小变化发生无规则的变化),以及具体与父容器哪条边的距离保持不变,下图为topright时的程序运行结果。

4、AutoEllipsis ,指示当label中的文字超出label大小时,是否在label的末尾显示省略号…,如下图:

以上设置autoEllipsis为true时,autosize属性一定要设置为false,否则由于label的大小随着文本的增多自动改变大小,autoellipsis属性将会失效。
5、autosize,当改变label的文本内容或者改变字体大小,字体样式时,label本省也跟着改变大小,如下图:

6、backcolor,改变背景颜色,如下图:

7、borderstyle,设置控件边框的样式,由于label的borderstyle的样式不明显,故这里用textbox举例,可以看出borderstyle为none时没有边框,且无立体感,为fixedsingle时有黑色的边框,为fixed3d时,立体感非常强,如下图

8、CausesValidation,该值设置为true时,当控件失去焦点时(控件焦点的执行顺序是Enter、GotFocus、Leave、Validating、Validated、LoseFocus),需要对控件进行验证(这里要注意不能在主窗体构造函数以及在Load事件中使控件获取焦点focus方法或者判断控件是否可以获取焦点CanFocus属性,这样的操作是无效的,关于何时可以对控件的焦点进行操作,请看这篇文章窗体加载时构造函数、load事件等执行顺序),经过测试原文中OnGotFocus无法执行,焦点操作在OnActivated方法开始以及之后都可以,如果不想重写这些方法并且要实现在初始化时对控件焦点进行控制,有两种方法参考,第一种是在form的Activated事件中控制控件的焦点,也可以另外开线程对控件焦点进行操作,线程控件验证代码和操作过程如下图):
private void label1_Validating(object sender, CancelEventArgs e)
{

if (((Label)sender).Text == string.Empty)
{

Console.WriteLine(“不能为空”);
e.Cancel = true;
}
}
private void Form1_Load(object sender, EventArgs e)
{

Thread thread1 = new Thread(UpdateUi);
thread1.IsBackground = true;
thread1.Start();

    }   private void UpdateUi()    {        this.Invoke(new Action (()=>label1 .Focus ()));     }
 public class Person    {            private string _lastName;        public string LastName        {                get {     return _lastName; }            set {     _lastName = value; }        }        private string _firstName;        public string FirstName        {                get {     return _firstName; }            set {     _firstName = value; }        }        private int _age;        public int Age        {                get {     return _age; }            set {     _age = value; }        }        public Person() {     }        public Person(string lastName, string firstName, int age)        {                this.LastName = lastName;            this.FirstName = firstName;            this.Age = age;        }    }

Person是一个类,

 public Form1()        {                InitializeComponent();  List<Person> list = new List<Person>();            list.Add(new Person("LastName1", "FirstName1", 30));            list.Add(new Person("LastName2", "FirstName2", 31));            list.Add(new Person("LastName3", "FirstName3", 32));            list.Add(new Person("LastName4", "FirstName4", 33));            //数据绑定            binding = new Binding("Text", list, "LastName");//实例化绑定            this.label3.DataBindings.Add(binding);//将数据源的LastName属性和label3的Text属性绑定            cm = (CurrencyManager)label3.BindingContext[list];//获取管理对象的列表 }

二、事件
1、layout
当把lable控件的autosize属性设置成false时,然后改变label的大小时,就能触发layout布局事件,当改变大小时,resize事件也能触发;

2、MarginChanged
当控件的边缘和tablelayoutpanel或者flowlayoutpanel的距离发生改变时,也就睡Margin属性的值发生改变时触发该事件;
3、Move
当label的postion属性值发生变化时,会触发Move事件;
4、PaddingChanged
当Padding属性发生改变时,会触发该事件;
5、click
鼠标单击控件时触发,不能区分出是鼠标的左键、中键还是右键触发;
6、doubleclick
鼠标双击触发,包含左键、中键、右键,不能区分出是鼠标的左键、中键、右键触发,这里要注意的是,双击鼠标时,单击事件也会被触发,如果想实现双击时不触发单击事件,则可以在接收到单击事件时,往后计算一个时间段,比如100ms,如果100ms内,没有触发双击事件,则认为这就是一次单击事件,如果触发了双击事件,则取消单击事件的处理;
7、resize
当改变了控件的size属性时发生;
8、MouseCaptureChanged
控件失去鼠标捕获时发生,所以当鼠标按下控件,然后再次松开先出发了mouse up事件,然后就触发了MouseCaptureChanged事件;另一种情况是,按下鼠标,然后鼠标不松开,然后直接按下tab键去改变被按下控件的焦点,让其失去焦点,这时会触发MouseCaptureChanged事件;
9、MouseClick
和click的功能是一样,但是它的功能更全,就是该事件的e参数包含的数据有很多,比如鼠标是左键按下还是右键,鼠标位置等参数,所以如果需要精确的鼠标的信息,那么我们应该使用Mouseclick事件,如果不需要那么就使用click事件;
10、mousedoubleClick
比doubleclick多了很多的鼠标信息。
11、ChangeUICues
msdn的解释是:当控件的聚焦框显示或者隐藏时发生,暂且尚不清楚在哪些场景下能用到;
12、ControlAdded
当往label控件中添加别的控件时,比如执行 label1.Controls.Add(button1);会触发该事件;
13、ControlRemoved
当往label控件中移除控件时, 比如执行 label1.Controls.Remove (button1)、 根据对象删除label1.Controls.RemoveByKey(“button2”)、根据对象的Name的字符串删除
label1.Controls.RemoveAt(0); 根据索引删除
根据以上三种方法删除控件集合中的控件时触发该事件;
14、HelpRequested
当焦点在控件上,并且按下F1帮助键时,会触发该事件;
15、StyleChanged
16、AutoSizeChanged
AutoSize当属性更改时触发该事件;
17、BackColorChanged
BackColor的属性值更改时发生
18、BindingContextChanged
当调用DataBindings属性的Add方法为控件绑定数据时会触发该事件
this.label3.DataBindings.Add(binding);
19、CausesValidationChanged
CausesValidation属性值更改时触发该事件
20、ClientSizeChanged
当autosize属性设置成true时,只有改变text文本才能触发ClientSizeChanged事件,强制改变ClientSize属性也没用;当autosize属性设置成false时,强制改变ClientSize属性,也能触发ClientSizeChanged事件。
21、ContextMenuStripChanged
当给控件的ContextMenuStrip属性赋值时触发ContextMenuStripChanged事件。
label3.ContextMenuStrip = contextMenuStrip1;
22、CursorChanged
改变Cursor属性时会触发CursorChanged事件。
23、DockChanged
Dock属性改变时触发该事件。
24、FontChanged
字体改变时触发该事件
25、ForeColorChanged
字体颜色更改时触发
26、LocationChanged
位置更改时触发
27、ParentChanged
更改Label的父容器时触发,默认父容器是form,因为Label是直接放到form上的。
28、RegionChanged
更改Region属性时触发,默认Label的Region属性值为null,当我们设置Region属性时,Label的大小会发生变化,并且在这之前Label的autosize属性已经被设置为false,首先假定Label的大小为100100,如下:

当单击button1时,改变Label1的Region属性,该属性为50
50,0,0是相对于Label1的左上角定义的,
我们会发现改变Region属性后,Label的大小变为如下:
Region region = new Region(new Rectangle(0, 0, 50, 50));
label1.Region = region;


但是Label1的大小并没有发生变化,还是100*100,但是另外消失的部分无法再响应鼠标的任何事件了(也称为不击中),并且这里的Region,和我们在自定义控件时填充的Region含义不同,那个填充图形时使用的Region仅仅是代表我们要填充颜色的Region。
29、RightToLeftChanged
指示文字是否靠右显示;
30、SizeChanged
Label的Size属性,即改变大小时触发
31、TabIndex
TabIndex属性改变时触发
32、TextAlignChanged
文本在控件中的位置发生改变时触发;
33、TextChanged
更改label的文本时发生;
34、VisibleChanged
更改Visible属性时发生。
35、MouseDown
鼠标按下时发生
36、鼠标经过控件的Region区域时发生,而不是size所在区域时发生,当没有设置Region属性时,就是经过Size所在的区域时触发
37、MouseEnter
鼠标进入控件可见区域时触发,如果鼠标进入控件后,只在鼠标内部移动,那么该事件只触发一次。
37、MouseHover
鼠标保持在控件region内一段时间才触发,比如你鼠标快速在控件上方划过,并不会触发该事件,强调的是鼠标静止一段时间,但是会触发MouseEnter事件。
38、MouseLeave
鼠标离开控件的可见区域时触发;
39、MouseMove
鼠标在控件可见区域内移动时就触发。
40、DragEnter
将某项拖到控件的工作区时触发,只触发一次,和这个功能相似的有DragOver,DragOver是将对象拖过控件的边界时发生,所以只要鼠标把东西拖到控件工作区时,就算鼠标悬停不动,dragover事件也是不停的触发,和dragenter触发一次还是有区别的;
41、DragOver
将对象拖过控件的边界时发生,所以只要鼠标把东西拖到控件工作区时,就算鼠标悬停不动,dragover事件也是不停的触发,所以如果是需要不停的触发那就使用dragover事件
42、DragLeave
将对象脱出控件的边界时发生,只触发一次;
43、DragDrop
拖放操作完成时发生,也就是拖完以后松开了鼠标左键后发生。
典型的一个拖放操作应该是在dragenter中指定拖放操作的可能效果,该效果默认是没有的,也就是 e.Effect 的值是 DragDropEffects.None,此时即使进行了拖放操作,但是由于没有指定拖放效果,所以DragDrop事件不会触发,所以如果想实现拖放操作中的复制、移动等操作,必须要在DragEnter中将e.Effect 的值设置成指定的拖放效果,这样拖放完成后,才能触发DragDrop事件。例如:

  private void label1_DragDrop(object sender, DragEventArgs e)        {                if (e.Data.GetDataPresent(DataFormats.FileDrop))            {                    label1.Text = ((string[])e.Data.GetData(DataFormats.FileDrop))[0];            }        }        private void label1_DragEnter(object sender, DragEventArgs e)        {                DragDropEffects dragDropEffects = e.Effect;            e.Effect = DragDropEffects.Copy ;        }

上面的代码就是将文件的文件全路径复制给Label控件的Text属性。
44、GiveFeedback
在发起拖放时触发
45、QueryContinueDrag
在发起拖放时触发
46、Paint
对单个的控件进行重绘
private void label1_Paint_1(object sender, PaintEventArgs e)
{

Graphics g= e.Graphics;
g.FillEllipse(Brushes.Red, new Rectangle(0,0,50,50)); ;
}

如下所示在控件上画出了一个圆


47、Enter
焦点跑到Label时触发;
48、Leave
焦点离开label时触发
49、Validating
50、Validated
当使用tab键、shift+tab键等控制焦点时,焦点触发的顺序是:

当使用鼠标控制焦点或者通过focus方法控制焦点时,焦点触发顺序如下:

需要做网站?需要网络推广?欢迎咨询客户经理 13272073477