官术网_书友最值得收藏!

8.3 桌面應用程序中的OOP

第2章在C#中使用Windows Presentation Foundation(WPF)創建了一個簡單的桌面應用程序。WPF桌面應用程序非常依賴OOP技術,本節將論述OOP技術,說明本章的一些論點。下面通過一個簡單示例加以說明。

試一試:使用對象:Ch08Ex01

(1)在C:\BegVCSharp\Chapter08目錄中創建一個新的WPF應用程序Ch08Ex0l。

(2)使用Toolbox添加一個新的按鈕控件,使其位于MainWindow的中央,如圖8-12所示。

圖8-12

(3)雙擊按鈕,為鼠標單擊事件添加代碼。修改代碼,如下所示:

        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
          ((Button)sender).Content = "Clicked! ";
          Button newButton = new Button();
          newButton.Content = "New Button! ";
          newButton.Margin = new Thickness(10, 10, 200, 200);
          newButton.Click += newButton_Click;
          ((Grid)((Button)sender).Parent).Children.Add(newButton);
        }
        private void newButton_Click(object sender, RoutedEventArgs e)
        {
          ((Button)sender).Content = "Clicked! ! ";
        }

(4)運行應用程序,窗口如圖8-13所示。

圖8-13

(5)單擊標記為Button的按鈕,顯示內容將隨之變化,如圖8-14所示。

圖8-14

(6)單擊標記為New Button!的按鈕,顯示內容將隨之變化,如圖8-15所示。

圖8-15

示例說明

僅添加幾行代碼,就創建了一個可以完成某項任務的桌面應用程序。下面說明C#中的一些OOP技術。即使在談到桌面應用程序時,“一切皆對象”這句話也是正確的。從運行的窗體,到窗體上的控件,都需要使用OOP技術。這個示例重點說明本章前面介紹的一些概念,解釋如何把它們組合在一起。

在應用程序中,首先在MainWindow窗口中添加一個新按鈕,這個按鈕是一個對象,它是Button類的一個實例;窗口是MainWindow類的實例,該類從Window類派生而來。接著雙擊按鈕,添加一個事件處理程序,監聽Button類提供的Click事件。這個事件處理程序被添加到封裝應用程序的MainWindow對象代碼中,是一個私有方法:

        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
        }

這段代碼使用C#關鍵字private作為修飾符?,F在不要考慮這個關鍵字,第9章將詳細解釋本章提及的OOP技術。

我們添加的第一行代碼改變了所單擊按鈕上的文本。它利用了本章前面討論的多態性。表示按鈕的Button對象作為一個object參數發送給事件處理程序,該事件處理程序把參數強制轉換為Button類型(這是可能的,因為Button對象繼承于System.Object, System.Object是一個.NET類,object是其別名)。然后修改對象的Content屬性,改變顯示的文本:

        ((Button)sender).Content = "Clicked! ";

接著用new關鍵字創建一個新的Button對象(注意在這個項目中設置了名稱空間,因此可以使用這個簡單的語法,否則就需要使用這個對象的完整限定名System.Windows.Forms.Button):

        Button newButton = new Button();

還可以將新建的Button對象的Content和Margin屬性設置為合適的值,使按鈕顯示在合適的地方。注意,Margin屬性的類型是Thickness,因此使用非默認構造函數創建一個Thickness對象,然后將其賦值給Margin屬性:

        newButton.Content = "New Button! ";
        newButton.Margin = new Thickness(10, 10, 200, 200);

在代碼的其他地方添加一個新的事件處理程序,以響應新按鈕生成的Click事件:

        private void newButton_Click(object sender, RoutedEventArgs e)
        {
          ((Button)sender).Content = "Clicked! ! ";
        }

接著使用重載運算符語法,把這個事件處理程序注冊為Click事件的監聽程序:

        newButton.Click += newButton_Click;

最后,把新按鈕添加到窗口中。為此,使用已有按鈕的Parent屬性找出其父對象,將其轉換為正確類型,即Grid。然后,通過將新按鈕作為參數傳遞給Grid.Children屬性的Add()方法,將該按鈕添加到窗口中:

        ((Grid)((Button)sender).Parent).Children.Add(newButton);

這些代碼實際上沒有看起來那樣復雜。一旦理解了WPF是通過一個控件(包括按鈕和容器)的層次結構來顯示窗口的內容,使用這類代碼就顯得再自然不過。

這個簡短示例幾乎使用了本章介紹的所有技術??梢钥闯?,OOP編程并不復雜—— 只需要從另一個角度來看待編程即可。

主站蜘蛛池模板: 旬阳县| 惠水县| 江都市| 阿拉善盟| 兴文县| 千阳县| 剑川县| 石首市| 东阿县| 新昌县| 马鞍山市| 肇庆市| 桂平市| 济源市| 长垣县| 获嘉县| 张家口市| 九台市| 神木县| 隆昌县| 古田县| 治多县| 荆州市| 綦江县| 北安市| 子洲县| 兴化市| 廉江市| 体育| 虞城县| 永济市| 玉龙| 义马市| 普安县| 永清县| 安陆市| 仪陇县| 甘洛县| 高唐县| 盐源县| 屏山县|