豐富“WinForms” 的一個別樣"項目"(學生管理)
一個別樣的WinForms項目,他並沒多麽的新穎,但是它的用處確實有點多,或許會有你需要的地方;如果你對WinForms中那麽多控件無法把握,又或者是你根本就不懂,那我覺得你應該好好看看,如果一個人的人生命運無法去選擇時,那我覺得接受它將是沖刺命運終點的最好動力,一切的不公平都是你為了躲避困難而找的借口,年輕人就需要不平坦的人生道路,通過刻苦奮鬥得來的果實永遠是最甜、平坦的人生亦是最幸福的瞬間。
那首先就是項目的框架分別是:登錄(FrmLogin )——>主界面(FrmMain)——>修改密碼(FrmUpdate)——>添加/修改/刪除學生基本信息等。
框架搭好之後,我們了解一些框架內的代碼吧!至於具體的一些控件呢!只能是自己慢慢去看看,有些註意點大家可以記下,在控件生成後要及時去修改控件的“Name”的屬性,如果夠專業就盡量取專業點名字,那樣對你可能會有幫助的。
當界面形成後,事件會是你填寫代碼的最大障礙,所以WinForms的幾個事件需要認真記住:(單擊)Click,當界面顯示在眼前就形成的(Load),窗體正在運行的(FormClosing),(鼠標在界面移動)mouseClick
1.登錄界面(FrmLogin)
點擊登陸進去的代碼:
string str = "Data source=.;Initial catalog=Myschool;Uid=sa"; SqlConnection con = new SqlConnection(str); string sql = "select count(1) from student where studentname=‘"+txtUserName.Text+"‘ and Loginpwd=‘"+txtPwd.Text+"‘"; SqlCommand cmd = new SqlCommand(sql,con); try { con.Open(); int count=Convert.ToInt32(cmd.ExecuteScalar()); if (count>0) { //隱藏原界面 this.Hide(); //跳轉至主界面 FormMain frm = new FormMain(); Tool.pwd = txtPwd.Text; frm.Show(); } } catch (Exception) { MessageBox.Show("出現異常"); } finally { con.Close(); }
2.跳轉主界面(FrmMain)
菜單控件,工具控件、右鍵(contextMenuStrip)控件,ListView控件、視圖等
其中有ListView五大視圖:
1.大圖標(LargeIcon)
2.小圖標(SmallIcon)
3.列表(List)
4.詳細信息(Detail)
5.平鋪(Tile)
生成上方主界面ListView代碼:
private void btnBig_Click(object sender, EventArgs e) { //設置listview的屬性view為大圖標 lvlist.View = View.LargeIcon; } private void btnSmall_Click(object sender, EventArgs e) { //設置listview的屬性view為小圖標 lvlist.View = View.SmallIcon; } private void btnTile_Click(object sender, EventArgs e) { //設置listview的屬性view為平鋪 lvlist.View = View.Tile; } private void btnList_Click(object sender, EventArgs e) { //設置listview的屬性view為列表 lvlist.View = View.List; } private void btnDetails_Click(object sender, EventArgs e) { //設置listview的屬性view為詳細信息 lvlist.View = View.Details; }
跳轉至其它的各個功能的窗體:
private void TsmiUpdate_Click(object sender, EventArgs e) { //修改密碼 FrmUpdate frm = new FrmUpdate(); frm.Show(); } private void lvlist_SelectedIndexChanged(object sender, EventArgs e) { } private void StuName_Click(object sender, EventArgs e) { //查找 this.Hide(); FrmColor frm = new FrmColor(); frm.Show(); }
3.修改密碼(FrmUpdate)
判斷密碼是否為空,修改密碼是否成功
private void btnupdate_Click(object sender, EventArgs e) { string name = string.Empty; if (txtoldpwd.Text==name) { DialogResult result=MessageBox.Show("原密碼為空","通知",MessageBoxButtons.YesNo,MessageBoxIcon.Information); if (result==DialogResult.No) { this.Close(); } } if (txtnewpwd.Text == name) { DialogResult result = MessageBox.Show("新密碼密碼為空", "通知", MessageBoxButtons.YesNo, MessageBoxIcon.Information); if (result == DialogResult.No) { this.Close(); } } if(txtOK.Text == name) { DialogResult result = MessageBox.Show("確認密碼為空", "通知", MessageBoxButtons.YesNo, MessageBoxIcon.Information); if (result == DialogResult.No) { this.Close(); } } if (txtoldpwd.Text != name && txtnewpwd.Text != name && txtOK.Text != name) { string str = "Data source=.;Initial catalog=Myschool;Uid=sa"; SqlConnection conn = new SqlConnection(str); string sql = "update student set Loginpwd=‘" + txtnewpwd.Text + "‘ where Loginpwd=‘" + txtoldpwd.Text + "‘"; SqlCommand cmd = new SqlCommand(sql, conn); try { conn.Open(); if (txtOK.Text.Equals(txtnewpwd.Text)) { int count = cmd.ExecuteNonQuery(); if (count > 0) { MessageBox.Show("修改成功"); } } } catch (Exception) { MessageBox.Show("異常!"); ; } finally { conn.Close(); } } } private void FrmUpdate_Load(object sender, EventArgs e) { txtoldpwd.Text = Tool.pwd; } private void btncancel_Click(object sender, EventArgs e) { this.Close(); }
4.查找學生信息(FrmReseach)
從查找可以跳轉到添加/修改/刪除窗體
private void btnselect_Click(object sender, EventArgs e) { UpdateSelect(); } //按學生編號查找的方法 public void LoadDataFromDBToListView(string sql) { string str = "data source=.;initial catalog=MySchool;uid=sa"; SqlConnection con = new SqlConnection(str); SqlCommand cmd = new SqlCommand(sql, con); try { con.Open(); SqlDataReader dr = cmd.ExecuteReader(); if (dr != null) { if (dr.HasRows) { while (dr.Read()) { //每從DB中讀取出一條數據,需要形成一個ListViewItem對象,代表的是ListView中的一行 int stuNo = Convert.ToInt32(dr["studentno"]); //第二列 學生名字 string stuName = Convert.ToString(dr["studentname"]); //第三列 性別 string stugender = Convert.ToString(dr["gender"]); //第四列 年級名稱 string gname = Convert.ToString(dr["gradename"]); //第五列 電話 string phone = Convert.ToString(dr["phone"]); //第六列 地址 string address = Convert.ToString(dr["address"]); //第七列 郵箱 string email = Convert.ToString(dr["email"]); //第八列 出生日期 string birthday = Convert.ToString(dr["birthday"]); ListViewItem lvItem = new ListViewItem(stuNo.ToString()); lvItem.SubItems.Add(stuName); lvItem.SubItems.Add(stugender); lvItem.SubItems.Add(gname); lvItem.SubItems.Add(phone); lvItem.SubItems.Add(address); lvItem.SubItems.Add(email); lvItem.SubItems.Add(birthday); //讓lvItem和ListView關聯 lvlist.Items.Add(lvItem); lvlist.FullRowSelect = true; lvlist.ContextMenuStrip = ctmslist; } dr.Close(); } } } catch (Exception) { MessageBox.Show("異常!"); ; } finally { con.Close(); } } private void listView1_SelectedIndexChanged(object sender, EventArgs e) { string sql = @"select Studentno,Studentname,Gender,gradename ,phone,address,email,birthday from student,grade where student.gradeid=grade.gradeid"; LoadDataFromDBToListView(sql); } public void UpdateSelect() { lvlist.Items.Clear(); string sql = @"select Studentno,Studentname,Gender,gradename,phone,address ,email,birthday from student,grade where student.gradeid=grade.gradeid and studentname like ‘%" + txtname.Text + "%‘ "; LoadDataFromDBToListView(sql); } private void TsStudentInfo_Click(object sender, EventArgs e) { int stuno=Convert.ToInt32(lvlist.SelectedItems[0].Text); FrmEditStu frm = new FrmEditStu(); frm.stuno = stuno; frm.frmselect = this; frm.Show(); } private void FrmColor_FormClosing(object sender, FormClosingEventArgs e) { Application.Exit(); } private void 刪除學生信息ToolStripMenuItem_Click(object sender, EventArgs e) { int sno = Convert.ToInt32(lvlist.SelectedItems[0].Text); FrmEditStu frm = new FrmEditStu(); frm.stuno = sno; frm.frmselect = this; frm.Show(); }
5.添加學生信息(FrmEditStu)
修改學生信息:
刪除學生信息:
添加到數據庫:
private void btnSave_Click(object sender, EventArgs e) { //接收到的學號 //判斷學號是否為空來選擇sql語句 //判斷是否要刪除信息 if (sno!=0) { DialogResult result=MessageBox.Show("是否刪除?","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Error); if (result==DialogResult.Yes) { //刪除 this.Hide(); ChangDelete(); } } if (stuno!=0) { //修改 this.Hide(); GetUpdate(); } else { //新增 this.Hide(); GetSave(); } } //判斷stuno是否有值來修改select語句 //新增 public void GetSave() { string pwd = txtpwd.Text;//密碼 string pwdTrue = txtPwdTrue.Text;//確認密碼 string name = txtStuName.Text;//學生名 string stuGender = string.Empty;//取單選列表 if (rbtnGenderTure.Checked) { stuGender = "1"; } else { stuGender = "0"; } //給下拉框取值 int gid = GetIdByName(); string phone = txtPhone.Text;//電話 string address = txtAddress.Text;//地址 DateTime dt = dtBirthday.Value;//日期 string stuEmail = txtEmail.Text;//郵箱 //StudentNo, LoginPwd, StudentName, Gender, GradeId, Phone, Address, Birthday, Email string sql = "insert into student values(‘" + pwd + "‘,‘" + name + "‘,‘" + stuGender + "‘," + gid + ",‘" + phone + "‘,‘" + address + "‘,‘" + dt + "‘,‘" + stuEmail + "‘)"; string str = "Data source=.;initial catalog=MySchool;uid=sa"; SqlConnection con = new SqlConnection(str); SqlCommand cmd = new SqlCommand(sql, con); con.Open(); if (pwd.Equals(pwdTrue)) { int count = cmd.ExecuteNonQuery(); if (count > 0) { frmselect.UpdateSelect(); MessageBox.Show("成功!"); } con.Close(); } else { MessageBox.Show("前後密碼不匹配"); } } //修改 public void GetUpdate() { string name = txtStuName.Text;//學生名 string stuGender = string.Empty;//取單選列表 if (rbtnGenderTure.Checked) { stuGender = "1"; } else { stuGender = "0"; } //給下拉框取值 int gid = GetIdByName(); string phone = txtPhone.Text;//電話 string address = txtAddress.Text;//地址 DateTime dt = dtBirthday.Value;//日期 string stuEmail = txtEmail.Text;//郵箱 //StudentNo, LoginPwd, StudentName, Gender, GradeId, Phone, Address, Birthday, Email string sql = @"update student set studentname=‘" + name + "‘,gender=‘" + stuGender + "‘,gradeid=‘" + gid + "‘,phone=‘" + phone + "‘,address=‘"+address+"‘,birthday=‘"+dt+"‘,email=‘"+stuEmail+ "‘ where studentno="+txtStuNo.Text+""; string str = "Data source=.;initial catalog=MySchool;uid=sa"; SqlConnection con = new SqlConnection(str); SqlCommand cmd = new SqlCommand(sql, con); con.Open(); int count = cmd.ExecuteNonQuery(); con.Close(); if (count > 0) { frmselect.UpdateSelect(); MessageBox.Show("成功!"); } } //刪除 public void ChangDelete() { string pwd = txtpwd.Text;//密碼 string pwdTrue = txtPwdTrue.Text;//確認密碼 string name = txtStuName.Text;//學生名 string stuGender = string.Empty;//取單選列表 if (rbtnGenderTure.Checked) { stuGender = "1"; } else { stuGender = "0"; } //給下拉框取值 int gid = GetIdByName(); string phone = txtPhone.Text;//電話 string address = txtAddress.Text;//地址 DateTime dt = dtBirthday.Value;//日期 string stuEmail = txtEmail.Text;//郵箱 //StudentNo, LoginPwd, StudentName, Gender, GradeId, Phone, Address, Birthday, Email string sql = @"delete from student where studentno=‘"+txtStuNo.Text+"‘ "; string str = "Data source=.;initial catalog=MySchool;uid=sa"; SqlConnection con = new SqlConnection(str); SqlCommand cmd = new SqlCommand(sql, con); con.Open(); if (pwd.Equals(pwdTrue)) { int count = cmd.ExecuteNonQuery(); if (count > 0) { frmselect.UpdateSelect(); MessageBox.Show("成功!"); } } else { MessageBox.Show("前後密碼不匹配"); } con.Close(); } //根據對應條件查詢班級id public int GetIdByName() { string str = "Data source=.;initial catalog=MySchool;uid=sa"; SqlConnection con = new SqlConnection(str); string sql = "select gradeid from grade where gradename=‘"+cmbGrade.Text+"‘"; SqlCommand cmd = new SqlCommand(sql, con); int gid = 0; try { con.Open(); gid =Convert.ToInt32(cmd.ExecuteScalar()); } catch (Exception) { MessageBox.Show("網絡異常"); } finally { con.Close(); } return gid; } //根據對應條件查詢班級gname public string GetNameById(int gid) { string str = "Data source=.;initial catalog=MySchool;uid=sa"; SqlConnection con = new SqlConnection(str); string sql = "select gradename from grade where gradeid=" + gid + ""; SqlCommand cmd = new SqlCommand(sql, con); string name = ""; try { con.Open(); name =cmd.ExecuteScalar().ToString(); } catch (Exception) { MessageBox.Show("網絡異常"); } finally { con.Close(); } return name; } //加載年級下拉框 public void LoadGrade() { //拿到所有年級名稱 string str = "Data source=.;Initial catalog=MySchool;uid=sa"; SqlConnection con = new SqlConnection(str); string sql = "select gradename from grade"; SqlCommand cmd = new SqlCommand(sql, con); try { con.Open(); SqlDataReader dr = cmd.ExecuteReader(); if (dr != null) { if (dr.HasRows) { while (dr.Read()) { string gname = dr["gradename"].ToString(); //每讀到一個年級名稱,我就將"S1",添加到下拉框 cmbGrade.Items.Add(gname); } } } } catch (Exception ex) { MessageBox.Show("網絡異常"); } finally { con.Close(); } } //根據學號加載其他信息 public void LoadStuInfoByStuNo() { string str = "Data source=.;Initial catalog=MySchool;uid=sa"; SqlConnection con = new SqlConnection(str); string sql = "select * from student where studentno="+stuno+""; SqlCommand cmd = new SqlCommand(sql, con); try { con.Open(); SqlDataReader dr = cmd.ExecuteReader(); txtStuNo.Text = stuno.ToString(); if (dr!=null) { if (dr.HasRows) { while (dr.Read()) { string stuname = dr["studentname"].ToString(); txtStuName.Text = stuname;//姓名 string stuGender = dr["gender"].ToString(); if (stuGender == "1") { rbtnGenderTure.Checked = true; } else if (stuGender == "0") { rbtnGender.Checked = true; }//性別 int gid = Convert.ToInt32(dr["gradeid"]); string gname = GetNameById(gid); cmbGrade.Text = gname;//年級 string stuphone = dr["phone"].ToString(); txtPhone.Text = stuphone;//電話 string stuaddress = dr["address"].ToString(); txtAddress.Text = stuaddress;//地址 string stuemail = dr["email"].ToString(); txtEmail.Text = stuemail;//郵箱 DateTime stubirthday = Convert.ToDateTime(dr["birthday"]); dtBirthday.Value = stubirthday;//出生日期 } } } } catch (Exception) { MessageBox.Show("異常!!"); ; } finally { } } private void FrmEditStu_Load(object sender, EventArgs e) { //判斷學號是否為空來選擇sql語句 if ( sno != 0) { DialogResult result = MessageBox.Show("是否刪除?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Error); if (result == DialogResult.Yes) { this.Text = "刪除學生信息"; btnSave.Text = "刪除"; LoadStuInfoByStuNo(); } } if(stuno!=0) { this.Text = "修改學生信息"; btnSave.Text = "修改"; LoadStuInfoByStuNo(); } else { btnSave.Text = "保存"; LoadGrade(); } } private void FrmEditStu_FormClosing(object sender, FormClosingEventArgs e) { Application.Exit(); } private void btnClear_Click(object sender, EventArgs e) { this.Close(); }
6.動態圖片時鐘
計時控件:
通過時間來讓幾張圖連接形成動態的計時:
private int index = 0; private void timers_Tick(object sender, EventArgs e) { if (index<imglist.Images.Count-1) { index++; } else { index = 0; } piclist.Image = imglist.Images[index]; }
WinForms很重要,雖說難度不是很大,但它的內容太多,之間的融合又太復雜,所以難易與否只有自己知道,但只要認真聽課、刻苦學習,我想時間會給我們大家最好的結果,所以我希望大家能指出我的一些不足之處,相信我們的互幫互助能讓我們都變得更好。
豐富“WinForms” 的一個別樣"項目"(學生管理)