WPF應用開發(fā)項目教程課件3.2 WPF事件_第1頁
WPF應用開發(fā)項目教程課件3.2 WPF事件_第2頁
WPF應用開發(fā)項目教程課件3.2 WPF事件_第3頁
WPF應用開發(fā)項目教程課件3.2 WPF事件_第4頁
WPF應用開發(fā)項目教程課件3.2 WPF事件_第5頁
已閱讀5頁,還剩38頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

本章導讀:本項目的主要內容是學習WPF路由事件知識,特別是鍵盤事件和鼠標事件。項目以“圖書借閱系統(tǒng)的登錄和注冊程序實現(xiàn)”為導向,二個任務(完成登錄窗體事件處理、完成注冊窗體事件處理

)為驅動,學習有關WPF的知識,特別是路由事件的靈活應用,本項目著力使學習者對路由事件有較深入的掌握,能靈活應用。項目三WPF路由事件—登錄和注冊程序實現(xiàn)

——任務二完成注冊窗體事件處理一、任務描述:完善注冊窗體的事件處理和后臺代碼編寫。二、知識準備:1WPF事件類型2WPF鍵盤輸入事件3WPF鼠標輸入事件二、知識準備:1、WPF事件簡介(1)WPF事件類型盡管每個元素都提供了許多事件,但最重要的事件通常包括如下5類:1.生命周期事件:在元素被初始化、加載或卸載時發(fā)生這些事件。2.鼠標事件:在鼠標進行使用時的動作引發(fā)這些事件。3.鍵盤事件:伴隨鍵盤上的鍵被按而引發(fā)的事件。4.手寫筆:主要針對在觸控環(huán)境下使用手寫筆引發(fā)的事件。5.多點觸控事件:一個或多個屏幕觸控引發(fā)的事件。二、知識準備:1、WPF事件簡介(2)WPF生命周期事件WPF元素從被創(chuàng)建以及直到被釋放的整個生命周期中,會有很多階段性的狀態(tài),由這些狀態(tài)觸發(fā)的事件統(tǒng)稱為生命周期事件,通??梢岳眠@些事件進行初始化或者事務善后工作。二、知識準備:1、WPF事件簡介(2)WPF生命周期事件二、知識準備:1、WPF事件簡介(3)WPF輸入事件當使用外設和計算機交互時引發(fā),典型情況是鼠標、鍵盤、手寫筆和觸屏對計算機輸入時觸發(fā)。這類事件都可以通過繼承自InputEventArgs的自定義事件參數(shù)類傳遞額外的信息。不同的輸入設備其輸入事件的參數(shù)類派生后也不一樣,但是它們都有共性,都能夠獲取該設備的一些狀態(tài)數(shù)據(jù),如鍵盤事件中的按鍵值、按鍵狀態(tài)等等。二、知識準備:2、WPF鍵盤輸入事件(1)按鍵輸入當用戶按下鍵盤上的一個或一組鍵時這類事件就會發(fā)生。二、知識準備:2、WPF鍵盤輸入事件(1)按鍵輸入個別控件還有專門的鍵盤輸入事件,比如文本框還擁有TextChange事件,一旦按鍵、數(shù)據(jù)綁定或賦值語句導致文本框中的文本內容后發(fā)生改變就會立即觸發(fā)。二、知識準備:2、WPF鍵盤輸入事件(1)按鍵輸入

<TextBoxx:Name="txtInput"Margin="5"Width="150"PreviewKeyDown="KeyEvent"KeyDown="KeyEvent"/>二、知識準備:2、WPF鍵盤輸入事件(1)按鍵輸入privatevoidKeyEvent(objectsender,KeyEventArgse){stringmsg="事件:"+e.RoutedEvent.ToString()+",Key:"+e.Key.ToString();lstOutput.Items.Add(msg);if(e.Key==Key.A&&e.KeyboardDevice.IsKeyDown(Key.LeftCtrl)){MessageBox.Show("Ctrl+A組合鍵被按下!");}}二、知識準備:2、WPF鍵盤輸入事件二、知識準備:2、WPF鍵盤輸入事件(1)按鍵輸入privatevoidTxtChange(objectsender,TextChangedEventArgse){stringmsg="事件:"+e.RoutedEvent.ToString()+",Key:"+txtInput.Text;lstOutput.Items.Add(msg);}二、知識準備:2、WPF鍵盤輸入事件二、知識準備:2、WPF鍵盤輸入事件(2)焦點在Windows世界中,用戶每次只能用一個控件。當前接收用戶按鍵的控件是具有焦點的控件,通常獲得焦點的控件的外觀和其他控件略有差別。在WPF中,有兩個與焦點有關的主要概念:鍵盤焦點和邏輯焦點。鍵盤焦點指接收鍵盤輸入的元素,而邏輯焦點指焦點范圍中具有焦點的元素。二、知識準備:2、WPF鍵盤輸入事件(2)焦點鍵盤焦點指當前正在接收鍵盤輸入的元素。在整個窗體中只能有一個具有鍵盤焦點的元素。在WPF中,具有鍵盤焦點的元素會將IsKeyboardFocused設置為true。Keyboard類的靜態(tài)屬性FocusedElement獲取當前具有鍵盤焦點的元素。為了使元素能夠獲取鍵盤焦點,基元素的Focusable和IsVisible屬性必須設置為true。有些類(如Panel基類)默認情況下將Focusable設置為false;因此,如果您希望此類元素能夠獲取鍵盤焦點,必須將Focusable設置為true。);}二、知識準備:2、WPF鍵盤輸入事件(2)焦點可以通過用戶與UI交互(例如,按Tab鍵定位到某個元素或者在某些元素上單擊鼠標)來獲取鍵盤焦點。還可以通過使用Keyboard類的Focus方法,以編程方式獲取鍵盤焦點。Focus方法嘗試將鍵盤焦點給予指定的元素。返回的元素是具有鍵盤焦點的元素,如果有舊的或新的焦點對象阻止請求,則具有鍵盤焦點的元素可能不是所請求的元素。二、知識準備:2、WPF鍵盤輸入事件(2)焦點二、知識準備:3、鼠標輸入(1)鼠標單擊鼠標單擊事件類似于按鍵事件,相對的區(qū)別則是鼠標的鍵有左右之分,而鍵盤上的鍵只有少數(shù)有左右之分(如Shift鍵);同時鼠標還有一個滾輪,可以有滾動事件。二、知識準備:3、鼠標輸入(1)鼠標單擊二、知識準備:3、鼠標輸入(1)鼠標單擊鼠標事件參數(shù)中按鍵屬性有5個:LeftButton、MiddleButton、RightButton和XButton1、XButton2,分別對應鼠標的左中右三個按鍵,以及兩個自定義特殊按鍵。它們的值是MouseButtonState枚舉類型,只有兩種狀態(tài):Pressed和Released。ClickCount的用途之一是確定是否發(fā)生了鼠標雙擊。一些類可公開雙擊事件,例如Control類上的MouseDoubleClick事件。如果類中未公開雙擊事件,則可以通過對事件數(shù)據(jù)使用ClickCount屬性來檢測雙擊。二、知識準備:3、鼠標輸入(1)鼠標單擊案例XAML中:<ButtonContent="清空"x:Name="btClear"Click="Clear_Click"HorizontalAlignment="Right"Margin="5"/>C#后臺代碼中:privatevoidClear_Click(objectsender,RoutedEventArgse){lstOutput.Items.Clear();}二、知識準備:3、鼠標輸入(2)鼠標滑動事件鼠標滑動事件是指鼠標經過WPF元素時觸發(fā)的事件,這種情況下只有鼠標指針的移動,沒有鼠標的按鍵行為。鼠標滑動事件包括三個事件:二、知識準備:3、鼠標輸入(2)鼠標滑動事件部分鼠標事件都提供了MouseButtonEventArgs對象,它繼承自MouseEventArgs。這意味著可以通過該對象獲得鼠標的坐標和按鍵狀態(tài)信息,以及通過ClickCount屬性判斷是單擊還是雙擊。privatevoidMouseMoveEvent(objectsender,MouseEventArgse){Pointpt=e.GetPosition(this);stringmsg="坐標("+pt.X.ToString()+","+pt.Y.ToString()+")";txtInput.Text=msg;}二、知識準備:3、鼠標輸入(3)鼠標拖動與拖放鼠標拖放通過以下三個步驟進行:(1)用戶單擊元素,并保持鼠標按鍵狀態(tài),拖放操作開始;(2)用戶將鼠標移到其他元素上,此時鼠標指針會變形;(3)當鼠標釋放時,元素接收到信息并根據(jù)事件處理代碼決定如何下一步操作。二、知識準備:3、鼠標輸入(3)鼠標拖動與拖放通常拖放包括了2個對象,即源和目標。為了創(chuàng)建拖放源,需要在拖放開始的某個事件(比如鼠標左鍵按鍵事件)中調用DragDrop.DoDragDrop()方法來初始化拖放操作,確定拖放操作的源。但是對于拖放源明確的控件,該操作可以跳過。例如對文本框中文本選中后拖放。二、知識準備:3、鼠標輸入(3)鼠標拖動與拖放DragDrop.DoDragDrop()函數(shù)接受三個參數(shù):dragSource、data以及allowedEffects。二、知識準備:3、鼠標輸入(3)鼠標拖動與拖放對于拖放目標需要將其AllowDrop設置為true(能接收拖放),并通過Drop事件來處理拖放結果。二、知識準備:3、鼠標輸入(3)鼠標拖動與拖放拖放事件的意義十分清晰,從名字中就能看出這些事件發(fā)生的時機。在這些事件中需要注意的則是傳入的DragEventArgs。通過設置它的Effects成員,軟件開發(fā)人員可以控制鼠標的狀態(tài),以提示用戶當前拖拽動作的光標反饋。同時通過它的Data屬性,軟件開發(fā)人員可以獲得DoDragDrop()函數(shù)調用時所傳入的數(shù)據(jù)。二、知識準備:3、鼠標輸入(3)鼠標拖動與拖放<WrapPanelGrid.Row="0"><TextBlockText="在這里按鍵:"Margin="5"MouseDown="BeginDrag"/><TextBoxx:Name="txtInput"Margin="5"Width="150"/></WrapPanel><DockPanelGrid.Row="1"><ListBoxx:Name="lstOutput"AllowDrop="True"Drop="DoDragEnter"/></DockPanel>二、知識準備:3、鼠標輸入(3)鼠標拖動與拖放privatevoidBeginDrag(objectsender,MouseButtonEventArgse){TextBlocktxt=(TextBlock)sender;DragDrop.DoDragDrop(txt,txt.Text,DragDropEffects.Copy);}privatevoidDoDragEnter(objectsender,DragEventArgse){stringmsg="拖入:"+e.Data.GetData(DataFormats.Text);e.Effects=DragDropEffects.Move;lstOutput.Items.Clear();lstOutput.Items.Add(msg);}二、知識準備:3、鼠標輸入(3)鼠標拖動與拖放案例三、任務分析:對于注冊窗體,其基本邏輯就是只有具有用戶管理權限的人才能打開操作,如果權限不正確則無法操作。對于用戶注冊中常見的用戶已經存在和兩次口令不匹配情況,可以通過控件的失去焦點事件進行檢查,對錯誤進行及時提示(提示信息也可以用紅色文字提醒)。創(chuàng)建窗體編寫標簽XAML修改標簽屬性四、任務實施:1.增加窗體Loaded事件,驗證用戶是否具備操作權限。2.增加注冊和關閉按鈕的直接路由事件,調用業(yè)務邏輯類的方法完成事件處理。四、任務實施:3.注冊按鈕路由事件處理代碼如下:privatevoidReg_Click(objectsender,RoutedEventArgse){stringuid=txtUID.Text.Trim();stringpwd1=txtPWD.Password;stringpwd2=txtRePWD.Password;stringusera,readera,booka,borrowa;if(uid.Length==0||pwd1.Length==0){MessageBox.Show("用戶名和口令都不能為空,請檢查!");txtUID.Focus();return;}四、任務實施:3.注冊按鈕路由事件處理代碼如下:privatevoidReg_Click(objectsender,RoutedEventArgse){….if(pwd1.CompareTo(pwd2)!=0){MessageBox.Show("兩次口令不相同,請檢查!");txtPWD.Focus();return;}usera=chkRightA.IsChecked.ToString();readera=chkRightB.IsChecked.ToString();booka=chkRightC.IsChecked.ToString();borrowa=chkRightD.IsChecked.ToString();四、任務實施:3.注冊按鈕路由事件處理代碼如下:privatevoidReg_Click(objectsender,RoutedEventArgse){…if(UserInfo.newUser(uid,pwd1,usera,readera,booka,borrowa,DateTime.Now.ToString())==true){MessageBox.Show("用戶注冊成功,請記住帳號和密碼!");return;}MessageBox.Show("該用戶已經被注冊,請檢查!");txtUID.Focus();}四、任務實施:3.關閉按鈕路由事件處理代碼如下:privatevoidExit_Click(objectsender,RoutedEventArgse){this.Close();}四、任務實施:3.(密碼驗證)失去焦點路由事件處理代碼如下:privatevoidCheckPassword(o

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論