WinformWindows 窗体应用程序是 C# 语言中的一个重要应用,也是 C# 语言最常见的应用。 在创建下面的时候,创建C# Winform项目即可创建窗体应用。 Winform应用主要由控件组成,而控件又包含三个部分:
窗体在每一个 Windows 窗体应用程序的项目文件夹中,都会有一个默认的窗体程序 Form1.cs,并且在项目的 Program.cs 文件中指定要运行的窗体。 internal static class Program { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] private static void Main() { // 启动应用程序中可视的样式 Application.EnableVisualStyles(); // 控件支持 UseCompatibleTextRenderingproperty 属性,该方法将此属 性设置为默认值。 Application.SetCompatibleTextRenderingDefault(false); // 用于设置在当前项目中要启动的窗体 Application.Run(new Form1()); } } 窗体属性每一个 Windows 窗体应用程序都是由若干个窗体构成的,窗体中的属性主要用于设置窗体的外观。 窗体的常用属性如下表所示。
窗体事件在窗体中除了可以通过设置属性改变外观外,还提供了事件来方便窗体的操作。 窗体中常用的事件如下表所示。
窗体方法定义的窗体都继承自 System.Windows.Form 类,能使用 Form 类中已有的成员,包括属性、方法、事件等。 实际上窗体中也有一些从 System.Windows.Form 类继承的方法,如下表所示。
当前窗体需要调用方法直接使用 窗体传值 窗体之间的传值有两种方式:
1、通过静态的数据进行共享的方式来实现窗体传值。 // Form1 public partial class Form1 : Form { public static String name = "form1的字符串"; public Form1() { InitializeComponent(); } // Form2 private void button2_Click(object sender, EventArgs e) { this.textBox1.Text = Form1.name; } 2、通过构造函数的方法获取到传递的对象。 // Form1 public partial class Form1 : Form { public string name = "Form1的字符串"; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Form2 form2 = new Form2(name); form2.ShowDialog(); } } // Form2 public partial class Form2 : Form { public Form2(string name) { InitializeComponent(); label1.Text = name; } } 打开窗体 打开窗体有两种方式 可以不断的打开窗体,每个窗体都是一个新的对象 private void button1_Click(object sender, EventArgs e) { Form2 form2 = new Form2(); form2.Show(); } 打开模式窗体,只能打开一个窗体,且只能点击新窗体,不能点击第一个窗体 private void button1_Click(object sender, EventArgs e) { Form2 form2 = new Form2(); form2.ShowDialog(); } 既可操作第一个窗体,又不会不断创新新窗体 public partial class Form1 : Form { Form2 form2; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { if (form2 == null) { form2 = new Form2(); } form2.Show(); } } MessageBox在 Windows 窗体应用程序中向用户提示操作时也是采用消息框弹出的形式。 在 MessageBox 类中仅定义了 Show 的多个重载方法,该方法的作用就是弹出一个消息框。 常用的 Show 方法参数如下表所示。
在上面所列出方法的参数中还涉及两个枚举类型,一个是 MessageBoxButtons,一个是 MessageBoxIcon。下面分别介绍这两个枚举类型中的具体值。 MessageBoxButtons 枚举类型主要用于设置消息框中显示的按钮,具体的枚举值如下。
MessageBoxIcon 枚举类型主要用于设置消息框中显示的图标,具体的枚举值如下。
调用 MessageBox 类中的 Show 方法将返回一个 DialogResult 类型的值。 DialogResult 也是一个枚举类型,是消息框的返回值,通过单击消息框中不同的按钮得到不同的消息框返回值。 DialogResult 枚举类型的具体值如下。
在 Form1窗体中添加鼠标单击事件,并在相应的事件中添加如下代码。 public partial class Form1 : Form { public string name = "Form1的字符串"; public Form1() { InitializeComponent(); } private void Form1_Click(object sender, EventArgs e) { DialogResult dialogResult = MessageBox.Show("是否打开新窗体?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); if (dialogResult == DialogResult.Yes) { Form1 form1 = new Form1(); form1.Show(); }else if (dialogResult == DialogResult.No) { this.Close(); } } } Label & LinkLabel在 Windows 窗体应用程序中,每个窗体都必不可少地会用到文本框和标签控件。 在 Windows 窗体应用程序中,标签控件王要分为普通的标签 (Label) 和超链接形式的标签 (LinkLabel) 。 普通标签 (Label) 控件的常用属性如下表所示。
普通标签控件 (Label) 中的事件与窗体的事件类似,常用的事件主要有鼠标单击事件、 鼠标双击事件、标签上文本改变的事件等。 超链接标签主要应用的事件是鼠标单击事件,通过单击标签完成不同的操作。 在窗体上通过单击超链接标签 (LinkLabel) 交换这两个标签上显示的信息。 public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void linkLabel1_Click(object sender, EventArgs e) { string temp = label1.Text; label1.Text = label2.Text; label2.Text = temp; } } TextBox文本框 (TextBox) 是在窗体中输入信息时最常用的控件,通过设置文本框属性可以实现多行文本框、密码框等。 文本框还有一些不同的属性, 如下表所示:
文本框控件最常使用的事件是文本改变事件 (TextChange),即在文本框控件中的内容改变时触发该事件。 创建一个窗体,在文本框中输入一个值,通过文本改变事件将该文本框中的值写到一个标签中。 public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void TextBox_Changed(object sender, EventArgs e) { label2.Text = textBox1.Text; } } Button按钮主要用于提交页面的内容,或者是确认某种操作等。 按钮包括普通的按钮 (Button)、单选按钮 (RadioButton)。 按钮常用的属性包括在按钮中显示的文字 (Text) 以及按钮外观设置的属性,最常用的事件是单击事件。 private void Register_Click(object sender, EventArgs e) { string username = textBox1.Text; string password = textBox2.Text; string rePassword = textBox3.Text; if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password) || string.IsNullOrEmpty(rePassword)) { MessageBox.Show("输入的选项不能为空"); } if (!password.Equals(rePassword)) { MessageBox.Show("两次输入的密码不一致!"); } // 将信息传递到主窗体 MainFrame mainFrame = new MainFrame(username, password); mainFrame.show(); } 显示效果如下: RadioButton在 C# 语言中 RadioButton 是单选按钮控件,多个 RadioButton 控件可以为一组,这一组内的 RadioButton 控件只能有一个被选中。 完成选择用户权限的操作,并在消息框中显示所选的权限名。 public partial class RadioButtonForm : Form { public RadioButtonForm() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { string msg = ""; if (radioButton1.Checked) { msg = radioButton1.Text; }else if (radioButton2.Checked) { msg = radioButton2.Text; }else if (radioButton3.Checked) { msg = radioButton3.Text; } MessageBox.Show("您选择的权限是:" msg, "提示"); } } Checked 属性可用于判断单选按钮是否被选中。如果该属性的返回值为 True,则代表选中;如果返回值为 False,则表示未选中。 CheckBox复选框主要的属性是:Name、Text、Checked。
主要的事件就是 CheckedChanged 事件。 public partial class CheckBoxForm : Form { public CheckBoxForm() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { string message = ""; CheckBox[] _checkBoxes = { checkBox1, checkBox2, checkBox3, checkBox4}; for (int i = 0; i < _checkBoxes.Length; i ) { if (_checkBoxes[i].Checked) { message = _checkBoxes[i].Text; } } MessageBox.Show("您选择的爱好是:" message, "提示"); } } 显示的效果如下所示: CheckedListBox复选列表框显示的效果与复选框类似,但在选择多个选项时操作比一般的复选框更方便。 public partial class CheckedListBox : Form { public CheckedListBox() { InitializeComponent(); System.Windows.Forms.CheckedListBox.ObjectCollection objectCollection = checkedListBox1.Items; objectCollection.Add("苹果"); objectCollection.Add("荔枝"); objectCollection.Add("梨子"); objectCollection.Add("香蕉"); objectCollection.Add("西瓜"); objectCollection.Add("葡萄"); objectCollection.Add("龙眼"); } private void button1_Click(object sender, EventArgs e) { string message = ""; for (int i = 0; i < checkedListBox1.CheckedItems.Count; i ) { message = checkedListBox1.CheckedItems[i].ToString(); } if (!string.IsNullOrEmpty(message)) { MessageBox.Show("您购买的水果有:" message, "提示"); } else { MessageBox.Show("您没有选购水果!", "提示"); } } } 其中选中蓝色效果是SelectedItem属性,而勾选的项则是CheckedItems属性。 显示的效果如下所示: ListBox列表框 (ListBox) 将所提供的内容以列表的形式显示出来,并可以选择其中的一项或多项内容,从形式上比使用复选框更好一些。 在列表框控件中有一些属性与前面介绍的控件不同,如下表所示。
列表框还提供了一些方法来操作列表框中的选项,由于列表框中的选项是一个集合形式的,列表项的操作都是用 Items 属性进行的。 public partial class ListBoxForm : Form { public ListBoxForm() { InitializeComponent(); listBox1.SelectionMode = SelectionMode.MultiSimple; ListBox.ObjectCollection listBox1Items = listBox1.Items; listBox1Items.Add("篮球"); listBox1Items.Add("排球"); listBox1Items.Add("羽毛球"); listBox1Items.Add("乒乓球"); listBox1Items.Add("游泳"); listBox1Items.Add("阅读"); listBox1Items.Add("写作"); } private void button1_Click(object sender, EventArgs e) { string msg = ""; for (int i = 0; i < listBox1.SelectedItems.Count; i ) { msg = listBox1.SelectedItems[i].ToString(); } if (!string.IsNullOrEmpty(msg)) { MessageBox.Show("您选择的爱好是:" msg, "提示"); } else { MessageBox.Show("您没有选择爱好", "提示"); } } } ListBox实现多选需要设置窗体的 SelectionMode 属性为 MultiSimple。 运行上面的示例,效果如下: 下面实现一个对ListBox进行动态添加和删除的操作: public partial class ListBoxForm : Form { public ListBoxForm() { InitializeComponent(); listBox1.SelectionMode = SelectionMode.MultiSimple; ListBox.ObjectCollection listBox1Items = listBox1.Items; listBox1Items.Add("篮球"); listBox1Items.Add("排球"); listBox1Items.Add("羽毛球"); listBox1Items.Add("乒乓球"); listBox1Items.Add("游泳"); listBox1Items.Add("阅读"); listBox1Items.Add("写作"); } private void button1_Click(object sender, EventArgs e) { string msg = ""; for (int i = 0; i < listBox1.SelectedItems.Count; i ) { msg = listBox1.SelectedItems[i].ToString(); } if (!string.IsNullOrEmpty(msg)) { MessageBox.Show("您选择的爱好是:" msg, "提示"); } else { MessageBox.Show("您没有选择爱好", "提示"); } } // 添加 private void button3_Click(object sender, EventArgs e) { string text = textBox1.Text; listBox1.Items.Add(text); } // 删除 private void button2_Click(object sender, EventArgs e) { for (int i = 0; i < listBox1.SelectedItems.Count; i ) { string str = (string) listBox1.SelectedItems[i]; listBox1.Items.Remove(str); } } } 运行上面的示例,效果如下: 注意:在迭代的时候不要使用 ComboBox组合框(ComboBox)控件也称下拉列表框,用于选择所需的选项,例如在注册学生信息时选择学历、专业等。 使用组合框可以有效地避免非法值的输入。 在组合框中也有一些经常使用的属性,如下表所示。
根据题目要求,创建一个名为 ComboBoxForm 的窗体: public partial class ComboBoxForm : Form { public ComboBoxForm() { InitializeComponent(); } private void ComboBoxForm_Load(object sender, System.EventArgs e) { comboBox1.Items.Add("计算机应用"); comboBox1.Items.Add("英语"); comboBox1.Items.Add("会计"); comboBox1.Items.Add("软件工程"); comboBox1.Items.Add("网络工程"); } private void combox1_Select(object sender, System.EventArgs e) { MessageBox.Show("您选择的专业是:" comboBox1.Text, "提示"); } private void button1_Click(object sender, System.EventArgs e) { if (string.IsNullOrEmpty(textBox1.Text)) { MessageBox.Show("请输入专业!", "提示"); return; } if (comboBox1.Items.Contains(textBox1.Text)) { MessageBox.Show("该专业已存在!"); return; } comboBox1.Items.Add(textBox1.Text); } private void button2_Click(object sender, System.EventArgs e) { if (string.IsNullOrEmpty(textBox1.Text)) { MessageBox.Show("请输入要删除的专业", "提示"); return; } if (!comboBox1.Items.Contains(textBox1.Text)) { MessageBox.Show("您输入的专业不存在", "提示"); return; } comboBox1.Items.Remove(textBox1.Text); MessageBox.Show("您删除了专业:" textBox1.Text, "提示"); } } 运行上面的示例,效果如下: |
|