Windows窗体编程(二)
1、鼠標事件處理
鼠標事件分為兩種,一種產生EventArgs型參數,另一種產生MouseEventArgs型參數。
1)EventArgs型參數的鼠標事件 舉例如下:
Click單擊鼠標時發生
DoubleClick雙擊鼠標時發生
MouseEnter鼠標進入控件邊界時發生
MouseLeave鼠標離開控件邊界時發生
MouseHover 鼠標停在控件上方時觸發
?
這些事件的處理程序原型如下:
private void Button_Click???? (object sender,????????????????????????????????????????? EventArgs e)
???????????????? 事件處理程序名稱? 觸發此事件的來源對象(此處是產生事件的控件) 包含了與事件相關的一些信息
?
2)MouseEventArgs型參數的鼠標事件 舉例如下:
通過MouseEventArgs型參數,事件處理程序可以獲取鼠標事件的信息,如鼠標位置、單擊次數、按下的是鼠標哪個鍵等
MouseClick 單擊鼠標時發生
MouseDoubleClick 雙擊鼠標時發生
MouseDown 按下鼠標時發生
MouseUP 放開鼠標時發生
?
MouseMove 鼠標在控件上方移動時觸發(不管鼠標是否按下)
?
MouseEventArgs類的屬性:
Button 記錄按下的是左鍵、右鍵還是中鍵
Button屬性的值是MouseButtons枚舉類型
? 成員名稱 說明
Left 鼠標左按鈕曾按下。?
Middle 鼠標中按鈕曾按下。?
None 未曾按下鼠標按鈕。?
Right 鼠標右按鈕曾按下。?
Clicks 記錄鼠標連續單擊次數,用來處理“三擊”等事件?? 不會用!
?
Delta 鼠標滾動的轉動量
X 事件觸發點的X坐標
Y 事件觸發點的y坐標
?
這些事件處理程序的原型如下:
private void Button_MouseClick(object sender,MouseEventArgs e)
?
相關知識補充:
書中程序中的Color結構屬于 System.Drawing空間。 它的公共屬性為各種顏色。
?
2、鍵盤事件處理
鍵盤事件也分兩種:一種產生KeyPressEventArgs型參數,一種產生KeyEventArgs型參數。
1)部分產生KeyPressEventArgs型參數的鍵盤事件
Keypress 敲擊鍵盤上的按鍵時發生
KeyPressEventArgs型參數含有與按鍵對應的信息,其類的屬性如下:
KeyChar 返回與按鍵對應的字符
Handled 指出KeyPress事件是否得到處理
這些事件處理程序的原型如下:
private void Form1_KeyPress(object sender,KeyPressEventArgs e)
2)部分產生KeyEventArgs型參數的鍵盤事件
KeyDown 按下按鍵時產生
KeyUp 釋放按鍵時產生
KeyEventArgs型參數含有與按鍵相關的信息,其類的屬性如下:
Alt 是否按下Alt鍵
Control 是否按下Ctrl鍵
Shift 是否按下Shift鍵
Handled 事件是否得到處理
KeyCode 返回與按鍵對應的Keys枚舉值,不包含同時按下的修飾鍵(Alt、Ctrl、Shift)
KeyData 返回與按鍵對應的Keys枚舉值,包含同時按下的修飾鍵
KeyValue 返回一個與按鍵對應的int型數值
Modifiers 返回一個只包含修飾鍵的Keys枚舉值
?
3、圖形框
屬性:Image 設置圖形框中的圖像
??????? SizeMode 控制圖像的顯示方式
事件:Click 單擊圖形框時發生
SizeMode是一個PictureBoxSizeMode型枚舉變量
? 成員名稱???????? 說明
AutoSize??????? 調整 PictureBox 大小,使其等于所包含的圖像大小。?
CenterImage?? 如果 PictureBox 比圖像大,則圖像將居中顯示。如果圖像比 PictureBox 大,則圖片將居于 PictureBox 中心,而外邊緣將被剪裁掉。?
Normal?????????? 圖像被置于 PictureBox 的左上角。如果圖像比包含它的 PictureBox 大,則該圖像將被剪裁掉。?
StretchImage? PictureBox 中的圖像被拉伸或收縮,以適合 PictureBox 的大小。?
Zoom???????????? 圖像大小按其原有的大小比例被增加或減小。?
在代碼中會用到? global::命名空間.Properties.Resources.項目資源文件
其實在添加資源圖片時,Form1.Designer.cs中在InitializeComponent()方法中pictureBox1的初始化時,就有類似語句
this.pictureBox1.Image = global::Key.Properties.Resources.faces;
這里的key雖然是空間名,且看似是程序建立初定義的空間名,但實際上與項目的屬性中“默認空間名”相關聯,修改“默認空間名”內容,global::后的命名空間名也必須修改。
?
4、列表框(ListBox)
列表框為用戶提供一組選項,用戶可以選擇其中一個或多個。
方法:
ClearSelected() 取消所有選擇
GetSelected() 檢驗某項是否被選中,若選中返回true,否則返回false
?
事件:
SelectedIndexChanged 選中的項目變化時發生
?
屬性:
Items 由列表框中所有項目(Item)組成的集合
?
SelectionMode 選擇模式,有None、One、MultiSimple、MultiExtended四種選項
屬性值
SelectionMode 枚舉值之一。默認為 SelectionMode.One。
成員名稱????????????? 說明
MultiExtended??? 可以選擇多項,并且用戶可使用 Shift 鍵、Ctrl 鍵和箭頭鍵來進行選擇。??
MultiSimple??????? 可以選擇多項。?
None??????????????? 無法選擇項。?
One???????????????? 只能選擇一項。?
?
SelectedIndex 返回選中項目的索引,若沒有選中項目,則返回-1
SelectedItem 返回選中的項目,若選中多個項目,則返回第一個
SelectedIndices 返回由所有選中項目的索引組成的集合
SelectedItems 返回由所有選中項目組成的集合
MultiColumn 為true時,項目可以多列顯示
Sorted 為true時項目按字母順序排列
Items 是一個由列表框中所有項目(Item)組成的集合,集合是.Net中定義好的一種類,通過該類的方法可以像集合中添加項目或從集合中刪除項目,Item屬性擁有的方法(其實只要是集合類型的都擁有如下方法)如下:
Add() 添加項目
Insert() 插入項目到指定位置
Remove() 刪除項目、參數為要刪除的項目
RemoveAt() 刪除項目、參數為要刪除的項目的索引
Clear() 清空列表框
?
當屬性SelectedMode 選擇MultiExtended時,如果要一次性刪除掉所有選中的選項,可以使用下列方法,即將書中的if語句改為while語句。
private void removeButton_Click(object sender, EventArgs e){while (listBox1.SelectedIndex != -1){this.listBox1.Items.RemoveAt(listBox1.SelectedIndex);}}?
5、復選列表框(CheckedListBox)
復選列表框派生于列表框ListBox,區別是復選列表框在每個項目(Item)前加了一個復選框。
復選列表框中的項目可以被勾選(Checked)或被選中(Selected),被勾選(Checked)的項目可以有多個,但選中(Selected)的項目只能有一個。
因為復選列表框繼承于列表框,所以它繼承了列表框中所有屬性、事件、方法,CheckListBox類的常見屬性和事件如下:
屬性:
Items 由列表框中所有項目(Item)組成的集合
SelectedItem 返回選中(Selected)的項目
SelectedIndex 返回選中項目的索引,若沒有選中項目,則返回-1
CheckedItems 返回被勾選(Checked)的一組項目
CheckedIndices 返回被勾選項目的一組索引
SelectionMode 是否可以多選,模式和ListBox類中一樣
CheckOnClick 為ture時第一次單擊即勾選項目,否則第一次為選中,第二次為勾選
MultiColumn 為true時項目可以多列顯示
Sorted 為true時項目按字母順序排列
?
事件:
SelectedIndexChanged 選中(Selected)的項目變化時發生
?
ItemCheck 勾選(Checked)或取消項目旁的復選框時發生
當觸發ItemCheck事件時,系統會發送給事件處理程序一個ItemCheckEventArgs型參數,ItemCheckEventArgs類的屬性如下:
CurrentValue 表示當前項目勾選狀態,用CheckState型枚舉表示
CheckState枚舉
成員名稱?????????? 說明
Checked????????? 該控件處于選中狀態。?
Indeterminate? 該控件處于不確定狀態。一個不確定的控件通常具有灰色的外觀。?
Unchecked?????? 該控件處于未選中狀態。?
?
NewValue 勾選狀態發生變化后,項目的CheckState值
Index 勾選狀態發生變化的那個項目的索引
?
6、下拉式列表框(ComboBox)
下拉式列表框以下拉清單的形式顯示列表。默認情況下,下拉清單是收起的,單擊向下箭頭可以展開下拉清單。
屬性:
Items 有列表框中所有項目(Item)組成的集合
SelectedItem 返回選中(Selected)的項目
SelectedIndex 返回選中項目的索引,若沒有選中項目,則返回-1
DropDownStyle 下拉式列表框的顯示類型
該屬性是ComboBoxStyle枚舉類型:
成員名稱????????????? 說明
DropDown????????? 文本部分可編輯。用戶必須單擊箭頭按鈕來顯示列表部分。這是默認樣式。?
DropDownList???? 用戶不能直接編輯文本部分。用戶必須單擊箭頭按鈕來顯示列表部分。?
Simple??????????????? 文本部分可編輯。列表部分總可見。?
?
MaxDropDownItems 下拉清單的最大長度
Sorted 為true時項目按字母順序排列
?
事件:
SelectedIndexChanged 選中(Selected)的項目變化時發生
?
7、列表視圖(ListView)
列表視圖可以穿件類似于Windows資源管理器的界面。
屬性:
Items 由列表視圖中所有項目(Item)組成的集合
SelectedItems 列表視圖中所有選定的項目
SelectedIndices 獲取控件中選定項的索引。該屬性是個集合
View 設置列表視圖的顯示方式,共五種
枚舉View的值:
成員名稱?????? 說明
Details???????? 每個項顯示在不同的行上,并帶有關于列中所排列的各項的進一步信息。最左邊的列包含一個小圖標和標簽,后面的列包含應用程序指定的子項。列顯示一個標頭,它可以顯示列的標題。用戶可以在運行時調整各列的大小。?
LargeIcon??? 每個項都顯示為一個最大化圖標,在它的下面有一個標簽。?
List???????????? 每個項都顯示為一個小圖標,在它的右邊帶一個標簽。各項排列在列中,沒有列標頭。?
SmallIcon???? 每個項都顯示為一個小圖標,在它的右邊帶一個標簽。?
Tile???????????? 每個項都顯示為一個完整大小的圖標,在它的右邊帶項標簽和子項信息。
?
Activation 設定激活項目的方式,有Stantard、OneClick、TwoClick三種方式
該屬性是ItemActivation枚舉類型,該枚舉類型的成員如下:
成員名稱??? 說明
OneClick??? 用戶必須單擊以激活項。光標更改為手形指針光標,項文本在用戶將鼠標指針移動到項上時更改顏色。?
Standard?? 用戶必須雙擊以激活項。在用戶將鼠標指針移動到項上時沒有提供任何反饋。?
TwoClick??? 用戶必須單擊項兩次以激活此項。單擊兩次與標準的雙擊不同,這是因為兩次單擊之間的時間間隔可以是任意的。當用戶將鼠標指針移動到項上時,該項文本更改顏色。?
?
MultiSelect 設定是否可以多選
CheckBoxes 設定是否顯示復選框
LargeImageList 用于保存大圖標的ImageList
SmallImageList 用于保存小圖標的ImageList
LabelEdit 設定是否可以編輯項目的名稱
Columns 設置“詳細信息”視圖中的列
GridLines 設定“詳細信息”視圖中是否顯示網格線
ContexMenuStrip 設置列表視圖關聯的右鍵菜單
Sorting 設置項的排序方式(None、Ascending、Descending)
該屬性是SortOrder 枚舉類型,成員如下:
成員名稱????? 說明
Ascending?? 項按遞增順序排序。?
Descending 項按遞減順序排序。?
None????????? 項未排序。?
?
事件:
SelectedIndexChanged 選中的項目改變時發生
ItemActivate 激活項目時發生
ColumnClick 在“詳細信息”視圖中單擊“列標題”時發生
?
在使用ItemActivate()方法時,一般用switch分支,對SelectedIndices的值進行判斷,再進行相應的處理,具體如下:
private void listView1_ItemActivate(object sender, EventArgs e){string myDoc = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);string myMusic = Environment.GetFolderPath(Environment.SpecialFolder.MyMusic);string myPicture = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);switch (this.listView1.SelectedIndices[0])//SelectedIndices是個集合{case 0: Process.Start(myDoc); break;case 1: Process.Start(myMusic); break;case 2: Process.Start(myPicture); break;case 3: Process.Start("iexplore.exe"); break;case 4: Process.Start("notepad.exe"); break;case 5: Process.Start("calc.exe"); break;}}?
8、樹狀視圖(TreeView)
像文件夾一樣的樹狀層次結構可以用樹狀視圖(TreeView)實現,它能清晰的現實節點(Node)間的層次結構。
屬性:
Nodes 由樹狀視圖中所有節點(TreeNode)組成的集合
SelectedNode 選中的節點
ImageList 設定用于顯示圖標的ImageList
CheckBoxes 設定是否顯示復選框
LabelEdit 設定是否可以編輯節點的名稱
?
事件:
AfterSelected 鼠標單擊節點時發生
AfterChecked 節點的勾選狀態改變時發生
NodeMouseDoubleClick 鼠標雙擊節點時發生
?
9、控件布局
以下兩個控件的屬性 決定了控件在容器中的布局情況,跟著書上例子做一遍很有趣
錨定 Anchor
???Dock
?
在練習期間,發現FormBorderStyle屬性決定了窗體Form1的是否可調節還是固定大小等。
轉載于:https://www.cnblogs.com/365up/archive/2009/11/14/1603152.html
總結
以上是生活随笔為你收集整理的Windows窗体编程(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Winsock服务器设计的四个关键问题
- 下一篇: 【原创】new和delete