第一章:初識Windows程序
1.1:第一個wondows程序
1.1.1:認識windows程序
Form1.cs:窗體文件:程序對窗體編寫的代碼一般都存放在這個文件(還有拖動控件時的操作和布局,還有設置一般的屬性) F4:跳到設置屬性的界面 F7:跳到邏輯代碼文件
From.Designer.cs:窗體設計文件:一般拖動控件自動生成的文件(很少修改)
From.resx:資源文件:配置圖片等資源。
Program.cs: 主程序文件:包含main方法的程序入口,如果要改執行的窗體直接run后面的文件名
Public partial class Form1:Form
{
//這個相當於partial是部分意思,,他繼承了Form文件的所有屬性和方法(:表示繼承)
}
屬性 |
說明 |
Name |
窗體對象的名稱,用來在代碼中標識 |
BackColor |
窗體的背景顏色 |
BackgroundImage |
窗體的背景圖片 |
FormBorderStyle |
窗體邊框的樣式 |
MaximinzeBox |
窗體是否最大化 |
ShowIntaskBar |
窗體是否出現Windows任務欄 |
StartPosition |
窗體第一次出先的位置 |
Text |
窗體標題欄顯示的文本 |
TopMost |
Xz顯示在某個窗體之上 |
WindowState |
窗體的初始化狀態 包括MaxMinzed(最大化) Minmized(最小化) |
方法 |
說明 |
Close() |
關閉窗體 |
Show() |
顯示窗體 |
ShowDiaLog() |
模式化窗體 (如果打開了,只有關閉了此窗體,其他窗體才能操作) |
Hide() |
隱藏窗體 |
1.1.3:基本控件
標簽(label):用於顯示不能編輯的文本或圖像 ,常用來在窗體上的其他控件做標注或說明
屬性 |
說明 |
Image |
在標簽上顯示的圖片 |
Text |
在標簽上顯示的文本 |
文本框(TextBox)用於獲得用戶輸入的信息和用戶顯示的文本
MaxLength |
指定可以在文本框輸入的最大字符 |
Multiline |
表示是否可以在文本框輸入多行文本 |
PasswordChar |
輸入的字符可以用一個符號或者什么來替換(屬性值可以是*,輸入實際的就可以隱藏) |
ReadOnly |
指定是否可以編輯(只讀) |
Text |
與文本框關聯的文本 |
組合框(ComboBox):先當於下拉框和文本框的結合體。可以輸入文本或進行選擇
Items |
組合框的項 |
DropDownStyle |
組合框的風格 一般(DropDownList)只能下拉 |
Text |
與組合框關聯的文本 |
SelectedIndex |
當前選中的索引(下標),從0開始 (返回int類型) |
SelectedItem |
獲取選中的項,返回object類型,返回選中項的值 |
事件 |
說明 |
Click |
單擊事件 |
SelectedIndexChanged |
選中項后發生的事件 |
按鈕(button):用戶通過點擊來進行操作
Endable |
返回bool類型的值,控件是否可用 |
Text |
按鈕上顯示的文本值 |
TextAlign |
按鈕上文本的對齊方式 |
事件 |
說明 |
Click |
點擊事件 |
|
|
1.2:事件的處理
1.單擊要創建處理的控件(雙擊直接完成,然后跳轉,直接寫代碼)
2:在屬性找到事件的標志(閃電)
3:雙擊要處理的事件
4:編寫處理的邏輯代碼 (This:代表當前窗體)
1.3:增強窗體的友好性
1.3.1:Messagebox消息框(返回的是一個DiaLogresult類型的值)
語法:MessageBox.Show(顯示的提示字符串,消息的標題,消息框的按鈕,消息框圖片)
例子:
- ·DiaLogResult result=MessageBox.Show( “確定要退出嗎?”,”操作提示”,messageBoxButtons.YesNo, MessageBoxIcon.Question );
If(result==DialogResult.yes)
{
This.Close();
}
1.3.3:窗體體的跳轉
語法:
按鈕下的事件
先確定即將跳轉的窗體的名字:
FrmADminMain(跳轉的窗體) frmAmdin =new FrmADminMain(); //創建一個窗體對象
FrmAmdin.Show(); //顯示此窗體
This.Hide(); //隱藏當前窗體
1.3.4:窗體間的數據傳遞
在即將跳轉的(下一個)窗體申明一個空的字符串 String name=string.Empty
在(本)窗體的 代碼
FrmADminMain(跳轉的窗體) frmAmdin =new FrmADminMain(); //創建一個窗體對象
frmAmdin.name=textuserName.text,trim(); //把這邊的文本的值傳遞給下一個窗體的name屬性
FrmAmdin.Show(); //顯示此窗體
This.Hide(); //隱藏當前窗體
第二章:構建良好的windows程序
2.1:使用菜單欄和工具欄
2.1.1:菜單欄的控件MenuStrip
屬性 |
說明 |
Name |
代碼中菜單對象的名稱 |
Items |
在菜單中顯示的集合 |
Text |
與菜單相關的文本 |
菜單項的主要屬性
屬性 |
說明 |
Name |
代碼中菜單項的名稱 |
DropDownItems |
在子菜單中顯示的項的集合 |
text |
與菜單項相關的文本 |
事件 |
說明 |
Click |
點擊事件 |
|
|
Application Exit(); //退出程序方法
This.close() //退出當前窗體方法
分割線的做法:減號(-),回車
快捷鍵:(&A-Z)
2.1.3:使用工具欄控件ToolStrip
工具欄的屬性
屬性 |
說明 |
ImageScalingsize |
工具欄顯示圖片的大小 |
Items |
工具欄的項的集合 |
|
|
工具欄上面的按鈕和標簽的主要屬性和事件
DisplayStyle |
圖像和文本的顯示方式,包括文本,圖片,和什么都不顯示 |
Image |
按鈕或標簽的圖片 |
Imagescaling |
是否調整按鈕或標簽上的圖片大小 |
text |
顯示的文本 |
TextImageRelation |
按鈕和圖片的顯示相對位置 |
Click |
點擊事件 |
|
|
2.2:使用windows的基本控件
2.2.1:使用窗體的基本控件
單選按鈕(radiobutton):選擇的項的集合
Checked |
指示是否被選中(Radio.checked==true)表示已選中 |
Text |
按鈕上的文本 |
事件 |
|
Click |
點擊事件 |
分組框(GroupBox)和panel容器
GroupBox |
Panel |
用於邏輯上一組控件 |
為了易於操作,把多個控件放在一起 |
日期控件(DataTimePicker):功選擇日期的控件
屬性 |
說明 |
Maxdate |
取得的最大日期 |
Mindate |
取得的最小日期 |
Value |
日期的值(相當於Text) |
Format |
用於設置格式 |
2.2.2:排列窗體的控件
Anchor:如果錨定了 ,各邊距就會不會改變(選中深灰),一直保持此距離,與某條邊
Dock:停靠 在那一邊 (Fill是填充窗體的空余部分)
2.2.3:創建MDI應用程序
概念:同時打開多個窗體,但是不會打開多個程序 有一個父窗體,幾個子窗體
步驟:
在父窗體的IsMdiContaner設置為true, 表示他是一個父窗體了
在(按鈕)跳轉的時候
FrmEdit frm = new FrmEdit();
frm.MdiParent=this; //他的父窗體就是這個窗體
frm.show();
2.3:組合框comboBox控件
Count |
獲得集合中的數目 |
DropDownStyle |
設置組合框的樣式 一般:GropDownlist(只能下拉) |
IsreadOnly |
H獲取指定能夠修改集合的值 |
Item |
集合中指定的索引項 |
Add() |
向組合框添加項 |
Clear() |
清除所有項 |
Remove() |
從組合框中移除指定項 |
|
|
例:CboGrade.items.Add(“一年級”); //添加
CboGrade.selectedIndex=0; //默認選擇第一項(坐標為0)
第三章:使用listview控件展示數據
3.1:圖像列表控件
3.1.1:圖像列表控件Imagelist
使用場景:為多個控件或則窗體提供的一部分圖片
屬性 |
說明 |
Images |
儲存的所有圖片的復數 |
ImageSize |
圖片的大小 |
transparentColor |
被視為透視的顏色 |
ColorDepth |
獲取圖片列表的顏色深度 |
3.2:列表視圖控件(listView控件)
說明:用於創建項windows資源管理器的用戶界面,有大圖標(LargeIcon)小圖標:(smallIcon)
列表(List)詳細信息(Detail)平鋪(Tile)
Columns |
詳細信息中顯示的 列頭(上面) |
FullRowselect |
當選擇一項時,他的子項全部一起選中(一行) |
Items |
Listview的項的集合 |
MuiliSelect |
是否允許選澤多項 |
Selected Intems |
選中項的集合 |
View |
指定listview的顯示模式 |
LargeimageList |
綁定設置顯示大圖標時的圖片 |
SmallImageList |
綁定設置顯示小圖標時的圖片 |
事件 |
說明 |
MouseDoubleClick |
雙擊事件 |
方法 |
|
Clear() |
清除listview項 |
|
|
設置大小圖表模式的代碼:大:this.lvcomputer.view=view.largeIcon
:
小:this.lvcomputer.view=view.smallIcon
3.3:contextMenuStrip控件
說名:快捷菜單:又叫上下文菜單
屬性 |
說明 |
DisPlayStyle |
指定是否顯示圖片和文本 |
Image |
顯示在菜單項的圖片 |
Text |
顯示 在菜單項的文本 |
Click |
單擊事件 |
|
|
向listView中添加數據
ListviewItms Items=new listviewitems(new stirng[] { “主項(第一個項)”, “子項“, “子項”, },圖片的坐標(2) );. //添加圖片的坐標
第四章:實現windows程序的數據更新
4.1:枚舉
4.1.1:使用枚舉的好處:可以避免不合理的賦值
定義枚舉類型:訪問修飾符 enum 枚舉名{ 值1,值2 }
1:枚舉的類
例:public enum Genders
{
男,女 //定義枚舉類
}
2:另一個類
Public class Student
{
public Genders studentGender; //定義枚舉屬性
Pubicl void Show( “我的性別是:“+ studentGender ); //顯示方法
}
3:有main方法的類
Student student=new Student(); //創建對象
Student.studentGender=Genders.男;
Stuent.Show(); //調用顯示方法
4.3:使用windows高級控件
4.3.1:圖片框控件(PictureBox)
用於顯示一張圖片的控件
屬性 |
說明 |
Image |
圖片框顯示的圖片 |
SizeMode |
指定如何處理圖片的位置和大小 |
4.3.1:計時器(Timer)控件
可以控制每隔一定的事件觸發一次事情 事件(Tick事件)
屬性 |
說明 |
InterVal |
事情觸發的頻率,一般以毫秒為單位 |
Endabled |
是否啟用事件 |
事件 |
|
Tick |
指每隔一段時間發生的事情 |
Start() |
啟用計時器 |
Stop() |
停止計時器 |
|
|
Int index=0;
例子:Tmrabout_Tick
{
If(index<this.ilimages.images.count-1)
{
Index++;
}else
{
Index=0;
}
This.pbAbout(此圖片框控件).Image=this.ilimages.images[index];
}
模式窗體:FrmAbout,frmAbout=new FmAbout();
frmABout.ShowLog();
第五章:實現windows的數據綁定
5.1:DataSet對象
5.1.1:DataSet(數據集)對象
說明:相當於一個零時倉庫,吧程序要用的數據零時存放在數據集里面,。不需要與數據庫連接,可以直接在數據集里面讀取數據,也可以先對數據集的數據進行修改,然后提交到數據庫里面 (數據集獨立於任何數據庫,不會直接和數據庫打交道)
5.1.2:創建DataSet數據集
位置:位於System.Data包下面
語法:DataSet dataset=new DataSet(); //創建對象
5.2:DataAdapter(適配器):對象
(相當於貨車):
DataAdapter:屬性和方法
SelectCommand |
從數據庫檢索Command對象 |
方法 |
說明 |
FILL() 填充數據集 |
向DataSet中的表填充數據 |
UPDate() 修改后提交到數據集 |
向DataSet中的數據提交數據庫 |
語法:
DataSet dataset=new DataSet();
sqlDataApater 對象 =new SqlDataApater ( sql語句,數據庫連接的connection對象 );
調用dataAdapter的對象Fill方法填充數據到數據集。
語法:dataApter.Fill( 數據集對象(dataSet),“數據表的名稱(table)” );
整體步驟:
DataSet dataset=new DataSet();
String str=“select * from Student”;
SqlConnection connection=new sqlCOnnection( 連接的字符串 );
sqlDataApater 對象 =new SqlDataApater ( sql語句,數據庫連接的connection對象 );
dataApter.Fill( 數據集對象(dataSet),“數據表的名稱(table)” );
綁定(網格視圖):this.dataGridView.DataSoure = ds.tables[“table”]; //綁定是的是網格視圖
綁定(下拉框):this.cboGrade.DataSoure=ds.table[“table”]; //下拉框的數據源
This.CboGrade.ValueMember=”GradeId”; //綁定隱藏的值(可能會做后續處理)
This.cboGrade.DispiayMember=”GradeName”; / /綁定顯示出來的值(用戶選擇)
5.3:數據綁定
5.3.1:comboBox數據綁定
屬性 |
說明 |
DataSource |
數據源 |
DisplayMember (選中顯示值,Cbo.Text==?) |
獲取顯示在用戶界面的值 |
ValueMember (選中隱藏值,(cbo.selectedValue==?)) |
隱藏的值(實際值),查找時可以做為條件,應為是主鍵 |
|
|
綁定(下拉框(comboBox)):this.cboGrade.DataSoure=ds.table[“table”]; //下拉框的數據源
This.CboGrade.ValueMember=”GradeId”; //綁定隱藏的值(可能會做后續處理)
This.cboGrade.DispiayMember=”GradeName”; / /綁定顯示出來的值(用戶選擇)
插入一行新的:語法:
:DataRow row=ds.Tables[“Grade”].Newrow(); //創建一行新的
row[“GradeId”]=-1; //第一列的值是編號: 為-1
row[“GradeName”]=”全部”; //第二列的值是年級名稱:為全部
ds. Tables [“Grade”].Rows.InsertAt(row,0); //把這一行插入到數據集的Grade表的行中 第一行(坐標0)
5.4:DataGridView控件
概念:數據網格視圖控件:可以直接刪除,修改數據,如果要顯示那個表的數據,直接設置DataSource的屬性:表示數據源
屬性 |
說明 |
AutoGeneerrateColumns |
設置DataGirdView是否自動創建列 |
Columns |
列的集合(列頭集合),網格視圖的頭部 |
DataSource |
DataGirdView的數據源 |
ReadOnly |
是否只讀(可以編輯) |
DataGirdView各列的屬性 |
|
ColumnType |
列的類型 |
DataPropertyName |
綁定數據列的名稱 (必須與數據庫的列名一樣) |
HeaderText |
列的標題文本(列頭) |
Visible |
指定列是否可見 |
FroZen |
指定水平滾動,列是否可以移動 |
ReadOnly |
指定單元格是否可讀 |
Selected |
|
DataGirdView必用屬性:
AllowUsertoAddRows |
(DataGirdView)可以取消掉默認展示出來的多余一行 |
AutoSizeColumnSMode 值為:Fill(填滿) |
選擇是否自動調整列的寬度 |
ColHeaderVisvile |
是否顯示列頭 |
Cloumns |
列的集合 |
ContextMEnuStirp |
綁定快捷菜單 |
MultiSelect 一般:false |
是否可以多行選中 |
ReadyOnly |
只讀 |
RowsHeaderVisible 一般:false |
行頭是否可見 |
SelectionMode 一般:FullRowSelect:整行選中 |
如何選擇單元格 |
Visible |
指定改控件是否可見 |
AutoGenerateColumns |
是否自動創建列 默認:true |
dgvStudentInfo.SelectedRows.count;
當對網格視圖進行操作的時候,需要先判斷一下選中的行的個數是否大於0,才進行操作
對數據庫進行修改操作()
SqlCommandBuilder:只能操作一個表的內容
接着上面的操作,修改 , 先直接雙擊修改表中的內容,然后保存(保存按鈕事件中的代碼如下:)
SqlCommandBuilder builder=new SqlCommandBUilder(adapter);
Adapter.Update(ds.”Student”);
數據網格視圖(DataGirdView):的值獲取:一般是Value:應為只有網格才有單元格所以:當只能選擇一行的時候: dgvStudent.selectedCells[0] .Value; 獲取第一個選擇的單元格的內容;
DgvStudent.selectedRows[0].Cells[0].Value;
列表視圖(listView):獲取值一般:Text結尾:
listView.SelectedItems[0].Text; //這個是獲取主項的值(第一個項的值)
listView.SelectedItems[0].SubItems[0].Text; // 獲取第一個子項的值(也就是第二個,應為主項在第一個)
listView.SelectedItems[0].SubItems[1].Text; // 獲取第二個子項的值(也就是第三個,應為主項在第一個)
第六章:數據的篩選和排序
6.1:TreeView控件
6.1.1:認識Treeview控件
概念:樹形控件(TreeView)用於以節點形式顯示文本和數據,這些節點按層次結構的順序排列。
Tree的屬性和事件
屬性 |
說明 |
Nodes |
TreeView中的所有根節點 |
ImagesList |
存放TreeView中節點的圖像 |
ImageIndex |
節點默認的圖片索引 |
SelectedImagesIndex |
節點選中的圖像的索引 |
SelectedNode |
當前選中的父節點 |
事件 |
說明 |
AfterSelect |
選中節點的事件 |
TreeNode(節點)的屬性和事件
Text |
節點上的文字 |
ImageIndex |
節點默認的圖像索引,不設置會與Tree一樣 |
SeletedImageIndex |
節點選中的圖片索引 |
Level |
節點的深度(從0開始) |
Nodes |
當前節點包含的子節點集合 |
ParentNode |
當前節點的父節點 |
Tag |
當前節點可以設置的隱藏值(可以用來做標記)當做條件判斷 |
SelectNode.parent.Text; |
當前的父節點的文本 |
selecNode.Tag |
得到選中節點設置的隱藏值 |
Select.Text |
選中的節點的文本 |
Splitcontainer |
拆分器(把一個窗體拆開) |
6.2:Dataview
6.2.1:認識DataView
DataView:為我們提供了動態視圖,並對動態生成的視圖進行排序,篩選,它的主要任務就是運行Windows控件的進行數據綁定。
DataView,DataSet,DataTable:關系
l 一個DataSet中可以有多個DataTable,一個DataTable可以生成多個DataView視圖
l 創建DataView對象語法:
DataView 數據視圖名=new DataView(DataTable對象)
DataView dataview=new DataView(dataset.Tables[“Student”])
DataView的常用屬性
Table |
用於獲取設置源的DataTable |
Sort |
把DataView生成的數據排序(dv.sort=””;)(相當於Oder by) |
RowFilter |
獲取或設置篩選條件(相當於Where)
只不過要先創建dv.RowFilter=stirng.format(“ ”,num); |
Count |
在應用RowFilter后,獲取DataView的行數 |
|
|
最后別忘記了綁定數據源:dgvStudentInfo.DataSource=dv;
(就是這個數據網格視圖的數據源就是用數據表創建的這個數據視圖)
6.3:在DataGridView中實現刪除操作
步驟:
1:先判斷一下選中的行數是否大於0:DgvStudentInfo.SelectedRows.COUNT>0;
2:先獲取選中的行的主鍵列的值(唯一的):SelectedRows[0].Cells[“StudentNo”].values;
3:編寫Sql語句實現刪除操作 注意:(如果有多表關聯,先刪子表,再刪主表,而且兩個sql語句可以寫在一起,先刪除的在前面,中間用分好隔開 )
DataGirdView必用屬性:
AllowUsertoAddRows |
(DataGirdView)可以取消掉默認展示出來的多余一行 |
AutoSizeColumnSMode 值為:Fill(填滿) |
選擇是否自動調整列的寬度 |
ColHeaderVisvile |
是否顯示列頭 |
Cloumns |
列的集合 |
ContextMEnuStirp |
綁定快捷菜單 |
MultiSelect 一般:false |
是否可以多行選中 |
ReadyOnly |
只讀 |
RowsHeaderVisible 一般:false |
行頭是否可見 |
SelectionMode 一般:FullRowSelect:整行選中 |
如何選擇單元格 |
Visible |
指定改控件是否可見 |
AutoGenerateColumns |
是否自動創建列 默認:true |
// 考點
String connStr = "Data Source=.;Initial Catalog=MySchool;User ID=sa;Password=sa";
public void BindTeacherInfo()
{
this.dgvTeacherInfo.AutoGenerateColumns = false; //不自動添加列
this.dgvTeacherInfo.Columns["colGradeId"].Visible = false; //隱藏列
//0.准備sql語句
StringBuilder sb = new StringBuilder();
sb.Append(" select id,name,age,teachYear,g.gradeId,gradeName from Teacher as T ");
sb.Append(" inner join Grade as G ");
sb.Append(" on G.GradeId=T.gradeId");
//1.獲得連接對象
SqlConnection conn = new SqlConnection(connStr);
//2.創建數據適配器
SqlDataAdapter adapter = new SqlDataAdapter(sb.ToString(),conn);
//adapter.SelectCommand = new SqlCommand(sql,conn);
//3.創建數據集
DataSet ds = new DataSet();
//4.填充數據
if(ds.Tables["Teacher"]!=null){
ds.Tables["Teacher"].Clear();
}
adapter.Fill(ds,"Teacher");
//5.綁定數據源
this.dgvTeacherInfo.DataSource = ds.Tables["Teacher"].DefaultView;
}