第九周學習內容
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++;
}
}