大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
作用:一般用于显示文本或者作为”按钮使用”,当作为显示文本使用时,通过设置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 ()));
}
以上代码在CausesValidation的值为true时,控件焦点离开时执行,初始化程序时,让label1获取焦点;
gif图片可以看出,如果在validating事件中,e.cancel=true时,焦点的位置会保持不动,除非e.cancel=false,焦点才能顺利的发生变化。
9、contextMenuStrip,右键菜单,用于将菜单和某个控件绑定,当右键单击控件时,弹出菜单,我们可以在菜单中编辑业务代码,如下:
如果需要改变菜单弹出的位置,则可以在控件的MouseUp事件中show出菜单,代码如下:
private void label1_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
//this.label1.ContextMenuStrip.Show(this, new Point(label1.Location.X, label1.Location.Y));
this.label1.ContextMenuStrip.Show(this.label1, new Point(label1.Location.X, label1.Location.Y));
}
}
show方法中的第一个参数是菜单距离指定控件一定位置时显示,第二个参数是菜单显示时和指定控件相距的X,Y位置。
10、Cursor,该属性指示当窗体程序运行后,鼠标经过控件时,鼠标光标的形状,如下图:
11、Dock,控件在父容器中停靠的位置,分为top,bottom,left,right,fill,none六种情况,并且label的autosize属性为true时以及为false时,控件的停靠情况不一致,分别如下图:
autosize为true时:
以上可以看出,当autosize为true时,left、top、fill均为左上角停靠,right为右上角,bottom为左下角
autosize为false时:
以上可以看出,当autosize为false时,left、right,、top、bottom分别在左、右、顶、底停靠,fill时,控件填充满整个父容器。
12、enable,从字面意思enable为true时,该控件可以使用,我所知道的功能是enable为false时,可编辑控件不能编辑,以textbox为例,如下图:
13、Font,forecolor,字体以及前景色属性,字体包括改变字体的大小(10,12)、字体的样式(宋体,楷体)、字形(粗体,斜体),前景色指字体的颜色。
14、GenerateMember,该属性决定让控件变量作为类的成员变量出现,还是作为InitializeComponent方法中的局部变量。即如果属性设为true,则你能在类的其他地方引用这个控件,否则,它将成为InitializeComponent方法的一个局部变量,你将在其他的方法中无法对这个控件进行直接引用控制,并且注意以下三点:
1)GenerateMember属性和Modifiers一同使用;
2)Modifiers仅当GenerateMember属性设置为True时有效,其用来设置成员变量的访问级别;
3)GenerateMember属性设置为False时,Modifiers属性设置无效,Modifiers默认为Private
15、flatstyle,该属性指定控件的外观,msdn说明了四种情况
1)Flat 该控件以平面显示。
2)Popup 该控件以平面显示,直到鼠标指针移动到该控件为止,此时该控件外观为三维。
3)Standard 该控件外观为三维。
4)System 该控件的外观是由用户的操作系统决定的。
由于lable的效果不明显,这里以button为例,如下图:
16、Image属性,该属性用于为控件设置背景图片,且导入图片有以下几种方式:
1)导入本地资源;
2)导入项目资源;
3)以读取本地文件的方式为imge属性赋值;
以上三种方式中,导入资源文件时,当我们打开资源文件时,程序不会报错,但打开本地用代码读取的文件时会报文件被占用的错误,而导入本地资源时,只能用于指定的控件,如果想要给其他控件使用还需要导入一次,比较麻烦,但使用导入项目资源的方式时(资源文件可以手动在Image属性下导入项目资源文件,这时会自动创建一个resources文件夹,或者也可以双击properties属性下的resources.resx,然后添加资源文件,效果是相同的,也会自动创建一个resources文件夹),,此时资源文件已经被写入Properities属性下的Resources.resc文件中,实际使用中,可以首先将所有的资源放到resources文件夹下,然后在resources.resx中添加资源文件,这个资源文件时公用的,各个控件可以通过代码灵活调用,代码和图片如下:
label1.Image = WindowsFormsApplication2.Properties.Resources.捕获;
17、Modifies,该属性用于设置控件的访问级别,并且当且仅当GenerateMember为true时有效,代码如下:
protected System.Windows.Forms.Label label1;
上述代码说明label的访问级别为protected和modifies的值相同。
18、ImageAlign,图像在控件中的对齐方式,当选择TopLeft时,当Image控件的大小改变时,图像的TopLeft部分始终优先显示在控件中,其余属性相同,即选择哪个部分,则哪个部分优先显示,如下图:
19、ImageIndex,该属性用于指示图像在Imgagelist中的索引,当控件不包含ImageList时,即控件只有Image属性,则ImageIndex为-1,当控件包含Imagelist,并且imageList不为空时,则可以通过设置ImageIndex的值来选择哪个Image,index的起始值是0,这里要注意Image和ImageList是互相对立的,Image不为Null,ImageList一定为Null,反之亦然,参考代码如下:
ImageList image1List = new ImageList();
Image img1 = Properties.Resources.捕获;
Image img2 = Properties.Resources.下载;
image1List.Images.Add(img1);
image1List.Images.Add(img2);
image1List.ImageSize = new Size(100,100);
label1.ImageList = image1List;
label1.ImageIndex = 1;
20、ImageList,指的是一个Image的集合,用于存储多个Imgae;
21、ImageKey,该属性指的是ImageList中图像的文件名(包含文件类型后缀),可让控件绑定ImageList,并且通过设置ImageKey的值来决定label绑定的图像;
22、Location,该属性指的是控件左上角和其所属父控件左上角的相对位置,一共有X和Y两个评价位置的维度。
23、Locked,该属性用于界面设计阶段时,对控件进行锁定,当程序运行后,控件的大小又可以重新改变,如下图:
24、Margin,主要用于设置控件与控件之间的距离,在tablelayoutpanel、flowlayoutpanel中放置控件,则通过设置控件的Margin属性,则可以控制控件与父容器ablelayoutpanel或flowlayoutpanel之间的距离,其余的应用场景暂时不清楚;
25、MaximumSize,MinimumSize,Size,该属性用于设置控件的大小,单位是pixel,且Size属性起作用时,autosize要设置为flase,MaximumSize、MinimumSize用于控制Size的最大,最小设置范围,当将MaximumSize的width和height属性设置为0,0时,该属性对Size失去限制作用,并且autosize的属性是否为true,MaximumSize、MinimumSize都生效;
26、Padding,该属性用于设置控件边缘和控件内文本的距离。
27、RightToLeft,该属性指示控件中的元素,主要指多行文本的对齐方式,有以下三种情况:
1)RightToLeft.No:表示文本左对齐,默认此选项;
2)RightToLeft.Yes:表示文本右对齐;
2)RightToLeft.Inherit:表示文本的读取方向由其父控件决定;
28、TabIndex,字面意思Tab键的索引,当窗体加载时,默认tabindex等于0的控件首先被聚焦,当我们不想使用鼠标控制焦点在哪个控件上时,我们可以通过设置控件的Tabindex值,然后运行程序后,通过Tab键来控制焦点的位置,并且焦点是从0、1、2、这种递增的顺序移动的,并且Label虽然可以设置TabIndex属性,但是当我们使用Tab键时,焦点并不能移动到Label上,这说明不是所有的控件都能响应Tab键。
29、Tag,设置或者获取包含控件数据的对象,也就是说可以通过Tag属性,给控件额外的增加数据,避免重新声明一些变量,案例代码如下:
label1.Tag = new Class1(13);
Class1 value = (Class1)(label1.Tag);
Console.WriteLine(value);
以上代码中,给label1的tag属性绑定一个class1的对象,然后再次获取其值;
30、Text,TextAlign,Text属性是为控件的文本赋值,TextAlign是设定文本在控件中的位置,top,topleft等,该属性起作用时,Autosize的值为false;
31、UseCompatibleTextRendering,该属性的msdn解释如下:
UseCompatibleTextRendering 属性旨在提供 Windows 窗体控件之间的视觉兼容性,这些控件使用 TextRenderer 类呈现文本,并使用 .NET Framework 1.1 类 .NET Framework 1.0 和 Graphics 执行自定义文本呈现的应用程序。 在大多数情况下,如果你的应用程序不是从 .NET Framework 1.0 或 .NET Framework 1.1升级,则建议你将 UseCompatibleTextRendering 设置为默认值 “false”。
.NET Framework 2.0 中引入了基于 GDI 的 TextRenderer 类以提高性能,使文本更好地显示,并改善对国际字体的支持。 在 .NET Framework的早期版本中,将使用基于 GDI+ 的 Graphics 类来执行所有文本呈现。 GDI 计算不同于 GDI+的字符间距和自动换行。 在使用 Graphics 类呈现文本的 Windows 窗体应用程序中,这可能会导致使用 TextRenderer 的控件的文本与应用程序中的其他文本显示不相同。 若要解决这种不兼容性问题,可将 UseCompatibleTextRendering 属性设置为特定控件 true。 若要将 UseCompatibleTextRendering 设置为应用程序中所有支持的控件 true,请使用 true的参数调用 Application.SetCompatibleTextRenderingDefault 方法。
总结起来就是,现在的程序都用false,因为不是从1.0,1.1升级过来的。
32、UseMnemonic ,msdn的解释如下:
如果标签不显示“&”符,而且为其显示文本中“&”符之后的一个字符加上下划线并将带下划线的字符看作访问键,值为 true;反之,如果“&”符显示在控件的文本中,值为 false。 默认值为 true。
总结起来就是,想显示&,则该属性设置为false,不想显示则设置为true,并且&后面的字符就是触发该控件单击事件的快捷键,因为label的单击事件用的比较少,所以详细用法我在button的用法这篇文章做了详细介绍,button中快键键的设置
33、UseWaitCursor ,该值指示是否将等待光标用于当前控件以及所有子控件,当该值为true时,当前控件的光标变为等待光标,不论之前他的cursor的值设置为什么,这里要注意,如果只是单纯的想设置一个控件的光标为等待光标,那么也可以设置Cursor的属性为等待光标,等待光标就是一个圈,一直在那里转,就像卡住了一样。
34、visible,该属性指示是否显示该控件及其子控件;
35、DataBindings
为该控件绑定数据,
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];//获取管理对象的列表
}
以上程序的意思是,首先实例化一个绑定,这个绑定的规则是将Lable3的Text属性和list的LastName属性绑定,然后获取一个管理绑定的数据源集合的管理对象,然后通过改变管理对象的Postion属性就能实现改变Lable3的Text属性,让该属性跟着列表中的数据的索引变化而变化。
二、事件
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属性,该属性为5050,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方法控制焦点时,焦点触发顺序如下:
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/158934.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...