第六讲 使用WinForms进行GUI设计
*事件驱动
简单的思路
用户个人的行为都被封装在很多事件中。
事件由操作系统来安排顺序执行。
*事件处理
事件被事件处理器处理
一般来说,这些处理器方法的代码是写在可视化界面的后面的。
.NET自动处理事件并生成一些基础的调用事件处理器的代码。
通俗讲,鼠标双击控件,写代码的过程。当然你也可以用类封装事件代码。
事件是通过Delegate(代理)映射给事件处理器的!
事件处理器参数
事件处理器有两个参数:
Sender:表示哪个对象生成了事件。
EventArgs:另外的特定事件信息(如果需要)。
private void cmdAdd_Click(object sender,System.EventArgs e){......}
这里举了个例子:通用文本框验证方法
检验文本框内容是否包括一个有效的整形数据
using SWF=System.Windows.Forms;
public static void IsInteger(object sender,System.ComponentModel.CancelEventArgs e)
{
SWF.TextBox txt=(SWF.TextBox) sender;
try
{
int.Parse(txt.Text);
}
cactch(FormatException)
{
SWF.MessageBox.Show("Please enter a numeric value");
e.Cancel=true;
}
cactch(OverflowException){...}
cactch(Exception ex){...}
}
*你可以“多对一”进行事件处理
不同的事件可以对应到相同的处理程序。
你也可以“一对多”进行事件处理
一个事件触发可以有多个动作(事件处理映射)
例如:this.cmdButton.Click +=new System.EventHandler(...);
this.cmdButton.Click -=new System.EventHandler(...);
*启动Form
Visual Studio在生成Main代码中自动实例化一个Form的对象。
*更好的方法是把Main方法移出Form Class
原因是:
Main更容易找到(不要成为GUI的一部分)。
Main很有可能还有其他的职责,这些职责是与GUI没有关系的。
一般使用App当作类名
例如:
using SWF=System.Window.Forms;
public class App
{
[STAThread]
public static void Main()
{
...//其他一些操作
SWF.Application.Run(new Form1());
}
}
*WinForms程序设计是一个很大的领域:
使用控件。
建立自定义控件。
多线程。
MVC(model-view-controller)设计
...
有待以后进一点深入学习!!!
*数据绑定
控件可以绑定数据源来获得数据
控件可以绑定整个集合collections.
控件可以绑定单个对象属性。
*数据绑定在.NET中是广泛使用的。
自动的reads & writes 绑定的数据!
// bind listBox
this.lstCustomers.DataSource = Globals.Customers;
// bind TextBox
this.txtFirstName.DataBindings.Clear();
this.txtFirstName.DataBindings.Add("Text", bc, "FirstName");