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;

}

}

如上,这些对用户的体验而设计的属性或代码,都应该成为一个程序员工作中的习惯,从学习之初就开始培养这种理念,为将来更好的项目开发打好基础。

 

 

 

Winform基础入门(一)相关推荐

  1. 用python循环语句求素数_Python基础入门_3条件语句和迭代循环

    Python 基础入门前两篇: Python 基础入门--简介和环境配置 Python基础入门_2基础语法和变量类型 这是第三篇内容,主要简单介绍条件语句和迭代循环语句,内容也比较简单,目录如下: 条 ...

  2. MAYA 2022基础入门学习教程

    流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,48.0 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:3.41 GB |时长:4.5小时 包含 ...

  3. Blender 3.0基础入门学习教程 Introduction to Blender 3.0

    成为Blender通才,通过这个基于项目的循序渐进课程学习所有主题的基础知识. 你会学到什么 教程获取:Blender 3.0基础入门学习教程 Introduction to Blender 3.0- ...

  4. 三维地形制作软件 World Machine 基础入门学习教程

    <World Machine课程>涵盖了你需要的一切,让你有一个坚实的基础来构建自己的高质量的电影或视频游戏地形. 你会学到什么 为渲染或游戏开发创建高分辨率.高细节的地形. 基于Worl ...

  5. SketchUp Pro 2021基础入门学习视频教程

    SketchUp Pro 2021基础入门学习视频教程 1280X720 MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz,2 Ch 流派:电子学习|语言:英语+中文字幕( ...

  6. Maya基础入门学习教程

    Maya基础入门学习教程 视频:.MKV, 1280x720, 共57节课 时长 4小时25分钟,3GB 语言:英语+中文字幕(根据原英文字幕机译更准确)+原英文字幕 指导老师:Shane Whitt ...

  7. Maya2022基础入门学习教程

    Maya2022基础入门学习教程 Maya 2022 Essential Training Maya2022基础入门学习教程 Maya 2022 Essential Training MP4 |视频: ...

  8. Blender基础入门学习教程 Learning Blender from Scratch

    Blender基础入门学习教程 Learning Blender from Scratch 流派:电子学习| MP4 |视频:h264,1280×720 |音频:aac,48000 Hz 语言:英语+ ...

  9. json vue 对象转数组_vue 基础入门(一)修改

    vue基础入门(一) 1. 什么是vue Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架. Vue 只关注视图层, 采用自底向上增量开发的设计. Vue 的目标 ...

最新文章

  1. 2.Ridge Regression 岭回归
  2. hdu3549(又是最大流模板题)
  3. openlayer 3 在layer上添加feature
  4. 阿里巴巴矢量图标库iconfont使用教程
  5. Linux 文件与目录管理、ls、cd、pwd、mkdir、rmdir、cp、 rm
  6. jQuery性能优化指南(1)
  7. 【华为云技术分享】云小课 | 如何通过虚拟私有云保障服务安全
  8. Java构造字符串算法题_LeetCode算法题-Repeated Substring Pattern(Java实现)
  9. 业务测试用例模版与大数据测试用例模板
  10. 小米AI音响的拆解及简要系统分析
  11. 销傲销售过程GSP管理系统功能概述
  12. windows 下杀手tomcat 进程
  13. IIS本地FTP服务器搭建
  14. Error: EBUSY: resource busy or locked, lstat ‘D:\pagefile.sys‘
  15. Axure中移动的绝对位置
  16. Git 团队协作机制
  17. SecureCRT和SecureFX(一)下载、安装、注册
  18. 2021(ICPC)-Jiangxi_Continued Fraction
  19. 纹宁指纹采集设备完美适配国产化操作系统
  20. Appserver的安装

热门文章

  1. 31道Java面试题,免费mysql服务器
  2. 界面设计方法 (1) — 1.界面的概念与分类
  3. 【软著】申请软件著作权流程资料及方法
  4. maven依赖顺序原则
  5. D2FQ: Device-Direct Fair Queueing for NVMe SSDs
  6. 【刷题】验证回文字符串
  7. oracle收集统计信息之analyze
  8. Vertu的签名黄金经典手机
  9. 【CANopen】CANopen总线讲解
  10. Java将数据信息写入文件文件的几种实现方法