WinForm:Windows Form,.Net中用来开发Windows窗口程序的技术,无论是控制台程序,还是ASP.Net都是调用.Net框架,因此所有知识点都是一样的。
新建一个Windows项目:Windows→Windows窗体应用程序
控件(Control):窗口上很多元素都是相似的,因此将这些元素抽象为一些类,这些类就叫做控件。
识别PowerPoint中的控件,按钮(Button)、文本框(TextBox)、标签(Label)、单选按钮(RadioButton)、复选框(CheckBox)。
添加(工具箱)、删除、移动、缩放控件
属性修改控件外观
控件的名字是Name
Text修改按钮名称
在事件里设置促发条件
事件:鼠标移动到按钮上的时候显示“大爷您来了”,离开按钮的时候显示“大爷常来呀”。
通过设计器设置属性、事件的东西存在哪里?看Designer.cs。
删除事件响应的方法:先到事件页签中删除属性,再删除函数。
拖放控件,输入姓名,点击按钮,窗口标题显示问好。设置窗口对象的属性就可以改变窗口的外观。点击按钮调用TextBox的Hide方法,调用控件的方法就可以使得控件发生动作。
当用户点击按钮的时候Button1_click方法被调用,这个方法不是程序员调用的,而是程序员把方法写好,并且说明“当用户点击按钮的时候执行Button1_click方法中的代码”,这一点和控制台程序不同。
方法放在那里,发生事件的时候框架来调用这个方法。button5_Click不是程序员调用的,而是框架调用的。回调(CallBack)。
控件、属性、事件、事件处理方法、控件的名字(控件的实例;对象名)
例:
//只要把事件响应的代码放到这里,然后指定“当用户点击这个按钮的时候执行这个方法”
//不用用户来调用,由。net操作系统来调用
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("我是另外一个按钮");
}
private void button2_Click(object sender, EventArgs e)
{
MessageBox.Show("点了一下");
}
private void button4_MouseEnter(object sender, EventArgs e)
{
button4.Text = "大爷您来啦";
}
private void button4_MouseLeave(object sender, EventArgs e)
{
button4.Text ="大爷您慢走";
}
例:简单的加法计算器,用户在文本框1、2中输入两个数,点击按钮,在文本框3中显示两个数的和。如果1或者2为错误的数据格式,则弹出对话框提示错误。int.TryParse、MessageBox.Show。
private void buttoncalc1_Click(object sender, EventArgs e)
{
int i1;
// i1 = Convert.ToInt32(textBoxNum1 );//别写成这样
if (!int.TryParse(textBoxNum1.Text, out i1))
{
MessageBox.Show("请输入一个数字");
textBoxNum1.Focus();//让控件获得焦点
return;//别忘了return
}
int i2;
if (!int.TryParse(textBoxNum2.Text, out i2))
{
MessageBox.Show("请输入一个数字");
textBoxNum2.Focus();
return;
}
int i3 = i1 + i2;
textBoxresult3.Text = Convert.ToString(i3);
}
例:练习2:页面上有一张图片(PictureBox,在Image属性中加载图片),默认是隐藏的(Visible=False),用户在文本框中输入身份证号(131226198105223452),点击按钮,如果年龄大于18岁则显示图片(Visible=True),否则提示年龄太小。取当前年份:DateTime.Now.Year。
private void buttonValid_Click(object sender, EventArgs e)
{
string id = textBoxId.Text.Trim();
if (id.Length != 18)//身份证号码长度为18
{
MessageBox.Show("身份证长度不合法");
return;
}
//年份是从6开始长度为4.
string strYear = id.Substring (6,4);
int year = Convert.ToInt32(strYear );
//if (DateTime .Now.Year -year >18 )
//{
// pictureBox1.Visible = true;
//}
//else
//{
// pictureBox1.Visible = false ;
//}
pictureBox1.Visible = (DateTime.Now.Year - year > 18);
}
练习3:页面上有一个文本框,文本框左侧和右侧各有一个按钮,点击左侧按钮文本框中的文字向左循环滚动一次,点击右侧按钮文本框中的文字向右循环滚动一次。
private void btnLeft_Click(object sender, EventArgs e)
{
string text = textBox.Text;
char firstChar = text[0];
string rightPart = text.Substring(1);
textBox.Text = rightPart + firstChar;
}
private void btnRight_Click(object sender, EventArgs e)
{
string text = textBox.Text;
char lastChar = text[text .Length-1 ];
string leftPart = text.Substring(0, text.Length-1);
textBox.Text = lastChar + leftPart ;
}
计时器Timer
Timer。每隔一段时间触发一个事件。不可视控件。
nterval:每隔多长时间干什么事
Enable:是否启用计时器
事件里Tick:当事件到来时,执行。。
计量单位:ms(毫秒)。 1秒=1000毫秒
例:小时钟。取当前时间DateTime.Now.ToString();
private void timer1_Tick(object sender, EventArgs e)
{
//MessageBox.Show("到了");
//.net中日期是DaTeTime类型,DateTime.Now为当前时间
textBox1.Text = Convert .ToString ( DateTime.Now);
例:按钮动态变大。
private void timer1_Tick(object sender, EventArgs e)
{
if (button1.Width > 200)
{
//停止计时器
timer1.Enabled = false;
return;
}
button1.Width = button1.Width + 5;
button1.Height = button1.Height + 5;
//if (button1.Width<200)
//{
// button1.Width = button1.Width + 5;
// button1.Height = button1.Height + 5;
//}
TextBox
文本框的几种模式:Multiline(多行)、PasswordChar(密码)
将文本框的PasswordChar设为*就是密码框效果,将MultiLine属性设置为true并且将高度拉到合适的大小就是多行效果,textBox4.AppendText(“hello”+"\n")就是附加一行。
控件名要有含义、控件名前缀的“潜规则”。
按钮Button:btn;文本框TextBox:txt;复选框CheckBox:cb。
控件的名字要有意义。
案例1:登录界面。登录错误三次退出程序,假设用户名、密码是admin、888888,不区分大小写。(易错点:局部变量与类变量)
退出程序this.Close()或者Application.Exit()
public partial class Form1 : Form
{
private int i = 0;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//显示的窗口就是Form1的对象,窗口不关对象就一直存在
//int i = 0;//错
if (i >= 3)
{
MessageBox.Show("错误次数过多");
textBox1.ReadOnly = true ;//设置不能输入
this.Close();//关闭程序
return;
}
if (textBox1.Text == "888888")
{
MessageBox.Show("密码正确");
}
else
{
MessageBox.Show("密码错误");
i++;
}
}