l 概念和基础
l 常用的控件及其作用
l 向文本框添加时间和控件ComboBox
l MessageBox类和窗体的一些属性事件
l Tab键聚焦设定
l ASCII码表中需要记忆的部分
l 为更好的用户体验而设计(范例)
1.概念和基础:
Winform:Windows Form的简称,.net中用来开发Windows窗口应用程序的技术叫做winform技术,每个窗体都可以看做一个类。
Partial:分部(类型),允许其定义的类,接口或结构拆分到多个文件中定义。分部声明不能指定不同的基类。
在一个项目中,同时包含多个窗体时,可通过修改Main方法中的Application.Run(newForm1());来使需要的窗体启动,需要同时启动多个窗体时,可以通过在默认启动的窗体的构造函数中创建其他窗体对象,并且调用对象的show()方法。
Application.Run(newForm2());
public Form2()
{
InitializeComponent();
Form1 ss =new Form1();
ss.Show();
}
控件: 控件是包含在窗体对象内的对象。每种类型的控件都具有其自己的属性集、方法和事件,以使该控件适合于特定用途。可以在设计器中操作控件,并编写代码以便在运行时动态添加控件。
在窗体上添加多个相同的控件时,可以在按下ctrl的同时拖动控件,发生复制选中项(可以是任意数量)的行为。这种方法比ctrl+v的效率更高。
先选中一个控件,按下ctrl再选中其他控件,再在菜单栏的格式中可设定这些控件对齐,间隔,相同大小,锁定等。
事件: 事件是对象发送的消息,以发信号通知操作的发生。操作可能是由用户交互(例如鼠标单击)引起的,也可能是由某些其他的程序逻辑触发的。
想让一段代码在两个或多个事件中执行,只需写入一个事件,然后让其他事件被执行时触发写了代码的事件即可。
控件起名规则:
文本类 txt...
按钮类 btn...
复选框 cb...
Label标签 lb...
Form frm...
2.常用的控件及其作用:
Label 标签(只读性信息显示,用于显示用户无法直接编辑的文本)。
Linklabel 超链接(链接,通过在其默认事件中写入 System.Diagnostics.Process.Start(@"http://www.hao123.com/");链接相应网址,LinkArea设定链接文本)
Button 按钮(命令,启动、停止或中断进程。)
TextBox 文本框(文本编辑,显示设计时输入的文本,可通过编程修改。)
RadioButton 单选按钮(值设定,当有多个单选按钮时,允许用户从一组选项中选择单个选项,不是同一组不能发生互斥。)(只有一个时,不能取消选定)
CheckBox 复选框(值设定,允许多选,可以取消选定)
ComboBox 下拉框(列表,显示下拉项列表)
PictureBox 图像显示(图片,在一个框架中显示图片)
要设定图片加载,可以在事件执行方法中写入如下函数:
pictureBox1.Image =Image.FromFile(@"G:\documents2\新建文件夹 (2)\winfrom22\winfrom111\5.jpg");设定加载路径
3.常用的属性和事件
1)属性:
Name 设定控件名称(每个控件其实都是其控件类的具体实例,因为每个控件的属性都是通过实例名.属性来设置的)
Location 设定控件位置(相对于窗体的坐标,(横,竖))
Size 设定控件大小(width,height)
Font 设定控件上字体
BackColor 设定背景颜色
BackGroundImage 设定背景图片
BacKGroundImageLayout 设定背景图片的显示样式(其值stretch表示填充,zoom表示按比例缩放)
Image 设定图片
SizeMode 设定pictureBox中图片的显示样式
Enabled 设定控件是否可用(不可用时也可见)
ForeColor 设定前景颜色
Text 设定控件上显示文本
TextImageRelation 设定控件上文本和图片的位置关系
TextAlign 设定文本对齐方式
Visible 设定控件是否可见
Cursor 设定鼠标进入控件范围内显示的样子
Multiline 设定多行显示
Items 集合(设定多个值)
DataBindings 数据绑定
PassWordChar 掩码(密码输入时使用,设定值可以是单个任意char类型字符)
Readonly 文本只读 (设定值为true或false)
MaxLength 限定输入的最大长度
WordWarp 设定多行编译是否自动换行
ScorllBars 滚动条(横向滚动条只有在WordWrap设定为false时才会出现)
tabIndex 设定tab键的聚焦顺序
tabStop 设定是否允许控件获得焦点(false为不允许)
SelectionStart (TextBox属性)获取选中文本的起始位置或者光标的位置(选中文本后没有光标)(从零开始)
2)事件:
Click 点击事件
Enter 获得焦点时触发(Form窗体该事件已被Activated替代)
Leave 失去焦点时触发(Form窗体该事件已被Decativate替代)
Keypress 按键事件(要求控件具有焦点)
MouseEnter 鼠标进入控件范围后发生
MouseHover 鼠标在控件内静止一段时间发生
MouseLeave 鼠标离开控件时发生
MouseMove 鼠标在控件上不断移动时触发
CollectionChanged 集合的成员更改时发生
CollectionChanging 集合的成员要更改时发生
DragDrop 拖放操作完成时发生
与属性相关的事件如TextChanged(文本更改时发生)等,都是在属性改变时发生,属性+Changed,即为时间名称。
3)方法:
Focus 获得焦点(实例方法)
Clear 清空
Hide 隐藏
Show 大部分控件都有的方法,表示显示该控件(跟visible=true有些像),打开新窗体时表示以非模态显示窗体(可开多个,程序运行到此处不会停止)
ShowDialog 打开新窗体时以模态显示窗体(只能开一个,程序运行到此处会停止,只有在打开窗体关闭后才会继续运行)
this.Close()/Application.Exit() 关闭程序
4.向文本框添加时间:
txtdatetime.Text =null;
txtdatetime.AppendText ( DateTime.Now.ToString());
附加文本时用text+=。。。的缺点是:效率低下,因为它的运行是新建字符串,当原字符串很大的时候,浪费资源。
5. ComboBox(下拉框)(经常见于省份城市选择等)
属性
DropDownStyle 设定下拉风格
comboBoxCity.Items.Add("临汾"); 向下拉框添加项目选项
comboBoxCity.Items.Clear(); 清空下拉框中内容
comboBoxcity.SelectedItem = comboBoxcity.Items[0]; 设定下拉框默认选项
comboBoxcity.SelectedIndex 获取或设定下拉框当前选项索引
6.MessageBox
显示消息框的类,主要使用到其静态方法Show方法。
MessageBox.Show(); 该方法用于弹出一个对话框,提供多种重载。
1)MessageBox.Show(string Text); string类型的文本
2)MessageBox.Show(string Text, string caption) 第二个参数为对话框标题(也是string类型)
3)MessageBox.Show(stringText,stringcaption,MessageBoxButton buttons) 第三个参数为枚举类型,显示对话框中要添加的按钮
这个时候我们需要定义一个DialogResult类型的变量来接受MessageBox返回的值,枚举类型。
DialogResult result= MessageBox.Show("请正确处理","错误消息",MessageBoxButtons.RetryCancel);
if (result == DialogResult.Retry)
{
MessageBox.Show("即将重新驱动");
}
4) MessageBox.Show(stringText,string caption,MessageBoxButton buttons, MessageboxIcon ) 第四个参数为枚举类型,显示对话框中要添加的图标
7.窗体Form的属性
Icon 设置窗体左上角图标
要想设定应用程序的图标,在项目的属性中设定图标和清单选项进行设定。
FormBorderStyle 设定窗体边框属性(Fix开头的属性值不允许用户调整窗体)
MaximizeBox 设定是否允许最大化
MinimizeBox 设定是否允许最小化
Opacity 设定透明度(通常用来作渐显渐隐效果)
ShowInTaskbar 设定窗体是否出现在windows最下边的任务栏中(一般不使用)
StartPostion 设定窗体运行时在windows中显示的位置。
TopMost 设定程序在最前端(即使点别的程序,也不会被遮挡(其他程序也设定此项时另算))
WindowState 设定窗体初始化时是(正常,最大化,最小化,属性值为枚举类型)
this.WindowState =FormWindowState.Maximized;
Form的事件:
Load(默认事件) 加载时发生(经常用于程序初始化)
FormClosing 关闭时发生
privatevoid Form1_FormClosing(object sender,FormClosingEventArgs e)
{
DialogResult result= MessageBox.Show("您确定要关闭程序吗?","消息",MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (result == DialogResult.Cancel)
{
e.Cancel = true;
}
}
e为FormClosingEventArgs类的对象,该类继承自EventArgs类,设定其属性Cancel=True,可以取消关闭事件。通过该对象的CloseReason可获得窗口关闭原因。
Activated 窗体获得焦点时被触发
Decativate 窗体失去焦点时被触发
每个窗体都有一个默认确认按钮(按回车时相当于点击这个按钮,无论焦点在何处,按enter都会触发点击),和一个默认取消按钮(按ESC键就相当于点击这个按钮)
AcceptButton 默认确认按钮设置
CancelButton 默认取消按钮设置
注意:窗体Form的Enter和Leave事件已被取消。
8.Tab键聚焦设定
1)在视图中设置聚焦顺序,鼠标左键依次单击控件排列聚焦顺序。
2)不想让控件被tab键聚焦时可以设定该控件的tabStop属性值为false.
9.ASCII吗表中需要记忆的部分
48-57 代表0-9
65-90 代表 A-Z
97-122 代表a-z
10.为更好的用户体验而设计
程序应该给用户最好的体验,贯彻这种理念的程序员,才有机会成为最优秀的程序员。(ps:这里只是为了贯彻这种理念而写的简单步骤,不是项目制作过程)
此处以最最简单的winform程序:数字累加程序为例。
1)添加应用程序可能用到的控件,对所有控件布局
加入控件,并根据控件布局调整窗体和控件,修改控件名称和ICON(图标)等基本属性。
2)按理来说此时只要再写入简单的加法累计计算代码就算完成了程序,但是对于细节的处理,才是决定用户是否会更容易喜欢上该应用程序的关键。
1))首先根据应用程序的启动,我们需要设定窗体的初始化状态和位置等,让它每次在windows界面中出现都有相同的,合理的状态位置等,这样才能培养用户良好的使用习惯。
2))对于此处,我们设定程序初始化状态WindowState为Normal(有些游戏可能会初始化为Maximized);位置StartPostion为CenterScreen(居中);由于程序非常简单,而且控件较少,如果窗体大小改变后,会影响程序美观,所以在此设定MaximizeBox属性为false,保留其可以最小化的属性;并且设定FormBorderStyle(窗体边框风格)属性,调用Fixed开头的属性值使其不能任意改变大小;设定第三个文本框为只读ReadOnly,防止用户输入,并且将其设定为TabStop,不让焦点切换到它上面。
调试运行,发现Tab键对光标的切换并不符合用户使用习惯,因而对其从新设定;设定窗体的默认确定按钮AcceptButton。
3)接下来,开始写入代码。我们需要做的是设计能让用户得到最好体验的代码,而不是最简单的代码。
1))在窗体加载时,设定窗体text为“欢迎使用数字累加器”,并且在第一个文本框中的输入改变后变为“数字累加器”。
2))对运算按钮写入基本代码,并且能对错误的数字做对应的判断。
3))设置用户按键输入事件,只能输入数字,并且第一位不能是零,保留退格键。
4))当发现运算错误时,自动聚焦到错误内容并将其选中以便用户修改。
5))设定结果输出文本框,当用户再次修改前两个文本框中内容时,自动清空。
至此,这个程序就基本完成了,下面展示一下制作成果:
======================================================================
贴上后台代码:
privatevoid Form1_Load(object sender,EventArgs e)
{
this.Text = "欢迎使用数字累加器";
}
private void txtFirst_TextChanged(object sender,EventArgs e)
{
this.Text = "数字累加器器";
txtResult.Clear(); //步骤5的内容
}
private void btnResult_Click(object sender,EventArgs e)
{
int firstNumber, secondNumber,resultNumber=0;
firstNumber = int.Parse(txtFirst.Text);
secondNumber = int.Parse(txtSecond.Text);
if (firstNumber >= secondNumber)
{
MessageBox.Show("错误:第一个数字必须小于第二个数字");
txtFirst.Focus();
txtFirst.SelectAll(); //聚焦并选中文本
}
for (int i = firstNumber; i <= secondNumber; i++)
{
resultNumber += i;
}
txtResult.Text = resultNumber.ToString();
}
private void txtFirst_KeyPress(object sender,KeyPressEventArgs e)
{
TextBox txt=(TextBox)sender; //接受sender(看哪个事件发生),txtFirst和txtSecond共用一个执行方法
if (e.KeyChar < ‘0‘ || e.KeyChar > ‘9‘) //依照ASCII码表顺序,对非数字排出
{
e.Handled = true; //设定不处理按键事件
}
if (txt.SelectionStart ==0 &&e.KeyChar==‘0‘)//设定光标为零位时不能输入数字0
{
e.Handled = true;
}
if (e.KeyChar == 8) //对照ASCII,保留退格键
{
e.Handled = false;
}
}
————————————————
版权声明:本文为CSDN博主「boboshan」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/a980433875/article/details/12677705