WinformWindows 窗體應(yīng)用程序是 C# 語(yǔ)言中的一個(gè)重要應(yīng)用,也是 C# 語(yǔ)言最常見(jiàn)的應(yīng)用。 在創(chuàng)建下面的時(shí)候,創(chuàng)建C# Winform項(xiàng)目即可創(chuàng)建窗體應(yīng)用。 Winform應(yīng)用主要由控件組成,而控件又包含三個(gè)部分:
窗體在每一個(gè) Windows 窗體應(yīng)用程序的項(xiàng)目文件夾中,都會(huì)有一個(gè)默認(rèn)的窗體程序 Form1.cs,并且在項(xiàng)目的 Program.cs 文件中指定要運(yùn)行的窗體。 internal static class Program {
/// <summary>
/// 應(yīng)用程序的主入口點(diǎn)。
/// </summary>
[STAThread]
private static void Main() {
// 啟動(dòng)應(yīng)用程序中可視的樣式
Application.EnableVisualStyles();
// 控件支持 UseCompatibleTextRenderingproperty 屬性,該方法將此屬 性設(shè)置為默認(rèn)值。
Application.SetCompatibleTextRenderingDefault(false);
// 用于設(shè)置在當(dāng)前項(xiàng)目中要啟動(dòng)的窗體
Application.Run(new Form1());
}
}窗體屬性每一個(gè) Windows 窗體應(yīng)用程序都是由若干個(gè)窗體構(gòu)成的,窗體中的屬性主要用于設(shè)置窗體的外觀。 窗體的常用屬性如下表所示。
窗體事件在窗體中除了可以通過(guò)設(shè)置屬性改變外觀外,還提供了事件來(lái)方便窗體的操作。 窗體中常用的事件如下表所示。
窗體方法定義的窗體都繼承自 System.Windows.Form 類(lèi),能使用 Form 類(lèi)中已有的成員,包括屬性、方法、事件等。 實(shí)際上窗體中也有一些從 System.Windows.Form 類(lèi)繼承的方法,如下表所示。
當(dāng)前窗體需要調(diào)用方法直接使用 窗體傳值 窗體之間的傳值有兩種方式:
1、通過(guò)靜態(tài)的數(shù)據(jù)進(jìn)行共享的方式來(lái)實(shí)現(xiàn)窗體傳值。 // 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、通過(guò)構(gòu)造函數(shù)的方法獲取到傳遞的對(duì)象。 // 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;
}
}打開(kāi)窗體 打開(kāi)窗體有兩種方式 可以不斷的打開(kāi)窗體,每個(gè)窗體都是一個(gè)新的對(duì)象 private void button1_Click(object sender, EventArgs e) {
Form2 form2 = new Form2();
form2.Show();
}打開(kāi)模式窗體,只能打開(kāi)一個(gè)窗體,且只能點(diǎn)擊新窗體,不能點(diǎn)擊第一個(gè)窗體 private void button1_Click(object sender, EventArgs e) {
Form2 form2 = new Form2();
form2.ShowDialog();
}既可操作第一個(gè)窗體,又不會(huì)不斷創(chuàng)新新窗體 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 窗體應(yīng)用程序中向用戶(hù)提示操作時(shí)也是采用消息框彈出的形式。 在 MessageBox 類(lèi)中僅定義了 Show 的多個(gè)重載方法,該方法的作用就是彈出一個(gè)消息框。 常用的 Show 方法參數(shù)如下表所示。
在上面所列出方法的參數(shù)中還涉及兩個(gè)枚舉類(lèi)型,一個(gè)是 MessageBoxButtons,一個(gè)是 MessageBoxIcon。下面分別介紹這兩個(gè)枚舉類(lèi)型中的具體值。 MessageBoxButtons 枚舉類(lèi)型主要用于設(shè)置消息框中顯示的按鈕,具體的枚舉值如下。
MessageBoxIcon 枚舉類(lèi)型主要用于設(shè)置消息框中顯示的圖標(biāo),具體的枚舉值如下。
調(diào)用 MessageBox 類(lèi)中的 Show 方法將返回一個(gè) DialogResult 類(lèi)型的值。 DialogResult 也是一個(gè)枚舉類(lèi)型,是消息框的返回值,通過(guò)單擊消息框中不同的按鈕得到不同的消息框返回值。 DialogResult 枚舉類(lèi)型的具體值如下。
在 Form1窗體中添加鼠標(biāo)單擊事件,并在相應(yīng)的事件中添加如下代碼。 public partial class Form1 : Form {
public string name = "Form1的字符串";
public Form1() {
InitializeComponent();
}
private void Form1_Click(object sender, EventArgs e) {
DialogResult dialogResult = MessageBox.Show("是否打開(kāi)新窗體?", "提示",
MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (dialogResult == DialogResult.Yes) {
Form1 form1 = new Form1();
form1.Show();
}else if (dialogResult == DialogResult.No) {
this.Close();
}
}
}Label & LinkLabel在 Windows 窗體應(yīng)用程序中,每個(gè)窗體都必不可少地會(huì)用到文本框和標(biāo)簽控件。 在 Windows 窗體應(yīng)用程序中,標(biāo)簽控件王要分為普通的標(biāo)簽 (Label) 和超鏈接形式的標(biāo)簽 (LinkLabel) 。 普通標(biāo)簽 (Label) 控件的常用屬性如下表所示。
普通標(biāo)簽控件 (Label) 中的事件與窗體的事件類(lèi)似,常用的事件主要有鼠標(biāo)單擊事件、 鼠標(biāo)雙擊事件、標(biāo)簽上文本改變的事件等。 超鏈接標(biāo)簽主要應(yīng)用的事件是鼠標(biāo)單擊事件,通過(guò)單擊標(biāo)簽完成不同的操作。 在窗體上通過(guò)單擊超鏈接標(biāo)簽 (LinkLabel) 交換這兩個(gè)標(biāo)簽上顯示的信息。 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) 是在窗體中輸入信息時(shí)最常用的控件,通過(guò)設(shè)置文本框?qū)傩钥梢詫?shí)現(xiàn)多行文本框、密碼框等。 文本框還有一些不同的屬性, 如下表所示:
文本框控件最常使用的事件是文本改變事件 (TextChange),即在文本框控件中的內(nèi)容改變時(shí)觸發(fā)該事件。 創(chuàng)建一個(gè)窗體,在文本框中輸入一個(gè)值,通過(guò)文本改變事件將該文本框中的值寫(xiě)到一個(gè)標(biāo)簽中。 public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private void TextBox_Changed(object sender, EventArgs e) {
label2.Text = textBox1.Text;
}
}Button按鈕主要用于提交頁(yè)面的內(nèi)容,或者是確認(rèn)某種操作等。 按鈕包括普通的按鈕 (Button)、單選按鈕 (RadioButton)。 按鈕常用的屬性包括在按鈕中顯示的文字 (Text) 以及按鈕外觀設(shè)置的屬性,最常用的事件是單擊事件。 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("輸入的選項(xiàng)不能為空");
}
if (!password.Equals(rePassword)) {
MessageBox.Show("兩次輸入的密碼不一致!");
}
// 將信息傳遞到主窗體
MainFrame mainFrame = new MainFrame(username, password);
mainFrame.show();
}顯示效果如下:
RadioButton在 C# 語(yǔ)言中 RadioButton 是單選按鈕控件,多個(gè) RadioButton 控件可以為一組,這一組內(nèi)的 RadioButton 控件只能有一個(gè)被選中。 完成選擇用戶(hù)權(quán)限的操作,并在消息框中顯示所選的權(quán)限名。 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("您選擇的權(quán)限是:" msg, "提示");
}
}Checked 屬性可用于判斷單選按鈕是否被選中。如果該屬性的返回值為 True,則代表選中;如果返回值為 False,則表示未選中。 CheckBox復(fù)選框主要的屬性是: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("您選擇的愛(ài)好是:" message, "提示");
}
}顯示的效果如下所示: CheckedListBox復(fù)選列表框顯示的效果與復(fù)選框類(lèi)似,但在選擇多個(gè)選項(xiàng)時(shí)操作比一般的復(fù)選框更方便。 public partial class CheckedListBox : Form {
public CheckedListBox() {
InitializeComponent();
System.Windows.Forms.CheckedListBox.ObjectCollection objectCollection = checkedListBox1.Items;
objectCollection.Add("蘋(píng)果");
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("您購(gòu)買(mǎi)的水果有:" message, "提示");
} else {
MessageBox.Show("您沒(méi)有選購(gòu)水果!", "提示");
}
}
}其中選中藍(lán)色效果是SelectedItem屬性,而勾選的項(xiàng)則是CheckedItems屬性。 顯示的效果如下所示:
ListBox列表框 (ListBox) 將所提供的內(nèi)容以列表的形式顯示出來(lái),并可以選擇其中的一項(xiàng)或多項(xiàng)內(nèi)容,從形式上比使用復(fù)選框更好一些。 在列表框控件中有一些屬性與前面介紹的控件不同,如下表所示。
列表框還提供了一些方法來(lái)操作列表框中的選項(xiàng),由于列表框中的選項(xiàng)是一個(gè)集合形式的,列表項(xiàng)的操作都是用 Items 屬性進(jìn)行的。 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("寫(xiě)作");
}
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("您選擇的愛(ài)好是:" msg, "提示");
} else {
MessageBox.Show("您沒(méi)有選擇愛(ài)好", "提示");
}
}
}ListBox實(shí)現(xiàn)多選需要設(shè)置窗體的 SelectionMode 屬性為 MultiSimple。 運(yùn)行上面的示例,效果如下:
下面實(shí)現(xiàn)一個(gè)對(duì)ListBox進(jìn)行動(dòng)態(tài)添加和刪除的操作: 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("寫(xiě)作");
}
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("您選擇的愛(ài)好是:" msg, "提示");
} else {
MessageBox.Show("您沒(méi)有選擇愛(ài)好", "提示");
}
}
// 添加
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);
}
}
}運(yùn)行上面的示例,效果如下:
注意:在迭代的時(shí)候不要使用 ComboBox組合框(ComboBox)控件也稱(chēng)下拉列表框,用于選擇所需的選項(xiàng),例如在注冊(cè)學(xué)生信息時(shí)選擇學(xué)歷、專(zhuān)業(yè)等。 使用組合框可以有效地避免非法值的輸入。 在組合框中也有一些經(jīng)常使用的屬性,如下表所示。
根據(jù)題目要求,創(chuàng)建一個(gè)名為 ComboBoxForm 的窗體: public partial class ComboBoxForm : Form {
public ComboBoxForm() {
InitializeComponent();
}
private void ComboBoxForm_Load(object sender, System.EventArgs e) {
comboBox1.Items.Add("計(jì)算機(jī)應(yīng)用");
comboBox1.Items.Add("英語(yǔ)");
comboBox1.Items.Add("會(huì)計(jì)");
comboBox1.Items.Add("軟件工程");
comboBox1.Items.Add("網(wǎng)絡(luò)工程");
}
private void combox1_Select(object sender, System.EventArgs e) {
MessageBox.Show("您選擇的專(zhuān)業(yè)是:" comboBox1.Text, "提示");
}
private void button1_Click(object sender, System.EventArgs e) {
if (string.IsNullOrEmpty(textBox1.Text)) {
MessageBox.Show("請(qǐng)輸入專(zhuān)業(yè)!", "提示");
return;
}
if (comboBox1.Items.Contains(textBox1.Text)) {
MessageBox.Show("該專(zhuān)業(yè)已存在!");
return;
}
comboBox1.Items.Add(textBox1.Text);
}
private void button2_Click(object sender, System.EventArgs e) {
if (string.IsNullOrEmpty(textBox1.Text)) {
MessageBox.Show("請(qǐng)輸入要?jiǎng)h除的專(zhuān)業(yè)", "提示");
return;
}
if (!comboBox1.Items.Contains(textBox1.Text)) {
MessageBox.Show("您輸入的專(zhuān)業(yè)不存在", "提示");
return;
}
comboBox1.Items.Remove(textBox1.Text);
MessageBox.Show("您刪除了專(zhuān)業(yè):" textBox1.Text, "提示");
}
}運(yùn)行上面的示例,效果如下: |
|
|
來(lái)自: 印度阿三17 > 《開(kāi)發(fā)》