熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

利用.NET Framework創建基於Windows的應用程序

2013-11-13 10:19:07  來源: .NET編程 

介紹
  由當前關於互聯網的許多討論來看似乎微軟的Visual Studio開發系統已經完全不再支持開發傳統的基於Windows操作系統的應用程序了而實際情況是微軟依然非常重視對基於Windows的應用程序的開發
  Win Forms是一種全新的窗體形式開發人員可以利用它創建充分利用微軟的Windows操作系統中豐富的用戶接口的應用程序Win Forms是微軟的NET平台的一部分采用了許多新的技術包括一個公共應用程序框架可管理的執行環境集成的安全性和面向對象的設計原則此外Win Forms還提供了對方便迅速連接到互聯網服務和創建基於ADO+數據模型的應用程序的支持有了Visual Studio中全新的共享開發環境開發人員就能夠使用包括Visual Basic和C#在內的任何支持NET平台的編程語言開發基於Win Forms的應用程序
Win Forms是什麼?
  就象在上面提到的那樣Win Forms是NET Framework中專指Windows客戶端UI編程的名字空間它與被稱作Web Forms的ASP+ UI的設計原理相同但其中的類和具體的實現是完全不同的Win API和Web組件之間的類是不能夠互相轉換的然而NET框架中的其他部分一樣一致性是其最優先考慮的部分目的是讓一個Win Forms開發人員能夠迅速地適應Web Forms的編程方式反之亦然例如二個名字空間都有Button類其中都有文本域OnClick事件和ForeColorBackColorFont等屬性
  Win Forms控制是完全基於SystemWinFormsControl類的Control類有基本的HWND功能處理大部分常見的WM_xxxx消息從Control類派生出的是RichControl控制它添加了輸出邏輯和繪制代碼SystemWinForms名字空間中的大部分控制都是由繼承RichControl得來的ScrollableControl添加了對窗口用戶區滾動的支持一般情況下滾動支持是通過ContainerControl控制獲得的ContainerControl控制是由繼承
  ScrollableControl控制而得來的其中添加了對子控制焦點和標簽進行管理的支持由繼承ContainerControl而生成的是Form它是Win Form的最高層的控制它有控制標題條系統菜單不規則窗口和缺省控制的屬性另一個由繼承ContainterControl而生成的是UserControl它就是開發人員可以創建的控制的基本類UserControl是用來管理其他子控制的微軟的Visual Studio NET中有可視化的UserControl和Form設計器我們可以發現用來添加和設計由繼承它們生成的類的工程條目
 
 
 
  我們已經討論了有關Win Forms的最基本的知識下面我們就來討論Win Forms的一些深層次的特性
  較短的學習周期
  Win Forms的首要目的是能夠盡可能地提高開發人員在開發Win平台應用程序的編程效率無論是GDI還是窗口狀態管理在Win中編程者相當困難的例如象WS_BORDER或WS_CAPTION等窗口風格只能在創建窗口時設定或修改當然了象WS_VISIBLE或WS_CHILD等窗口風格可以在已經創建的窗口上進行修改Win Forms就能夠消除這種不統一性確保操作可以在所有時間以同一種方式進行可以在任何時候以任何順序修改Win Forms控制的屬性並產生希望的效果在改變這些屬性時需要創建新的HWNDWin Forms會自動地創建窗口並對它進行合理的設置
  使用Win Forms獲得控制的通知或事件也更加簡單所有的Win Forms事件都是基於一種被稱作Delegates的通用語言運行庫功能的Delegates是一種安全函數的指針可以為任何控制的任何事件添加Delegate事件自理程序我們也無需通過重載創建一個處理所有事件的類創建一個事件圖或者為一個類中的所有事件實現一個接口而只會執行其中的一個事件也可以通過重載繼承類進行處理但一般情況下只有控制的創建者和在高級的應用程序設計中才會這樣作接收一個按鈕的Click事件是相當簡單的
  public class ButtonClickForm: SystemWinFormsForm {
  private SystemWinFormsButton button;
  public ButtonClickForm() {
  // 創建按鈕
  button = new SystemWinFormsButton()
  // 添加事件處理程序
  buttonAddOnClick(new SystemEventHandler(button_Click))
  // 在窗體上添加按鈕
  thisControlsAdd(button
  }
  private void button_Click(object sender EventArgs e) {
  MessageBoxShow(button clicked!
  }
  }
  在上面的代碼中我們已經創建了一個按鈕並添加了一個事件處理程序方法button_Click當該按鈕被點擊時其中的幾行代碼就會開始執行


 
  著手開發Win Forms工程也是相當簡單的在Visual Studio NET中創建Win Forms工程只會生成一個被編譯的文件Formcs而不會生成頭文件接口定義文件引導應用程序文件資源文件和庫文件工程所需要的所有信息都包含在窗體的代碼中其結果是工程可以很方便地由一個單一窗體組成的應用被擴充為包括有多個代碼文件復雜的由多窗體構成的應用程序其中沒有需要連接的臨時對象文件只有代碼文件和已經建立的DLL文件隨著慢慢熟悉這種方法創建NET框架應用程序和C/C++應用程序在復雜性方面的判別就會越來越明顯由於信息只包含在代碼文件中在Visual Studio NET環境之外創建工程也是相當簡單的而無論是Visual Basic代碼C#代碼或是其他任何支持NET框架的語言寫成的
  由於Win Forms是建立在通用語言運行庫的因此開發人員可以選擇任何一種支持通用語言運行庫的編程語言開發Win應用程序開發人員可以使用從C#到COBOLEiffelPerl在內的種編程語言開發Win Forms應用程序(或者Web Forms應用程序和Data應用程序)這使得掌握多種編程語言的開發人員可以高效地使用Win Forms建立應用程序
  輸出布局
  如果你曾經嘗試著創建一個能夠正確地改變大小的窗體就會發現這是多麼困難了/MFC和以前的Visual Basic沒有對此提供任何內置的支持但在Visual Studio NET中僅僅需要幾行的代碼(甚至這些代碼不需要你動手編寫因為在設計窗體時的Property Browser(屬性浏覽器)中就能實現這樣的功能就能創建一個能夠正確地改變大小的對話框
  基本的輸出布局是由二部分組成的Anchoring和DockingRichControl類有一個Anchor屬性這是一個枚舉型變量的值通過或運算來描述一個控制與其父控制邊緣的距離例如如果在一個窗體上創建了一個按鈕並且將其Anchor屬性設置為AnchorStylesBottomRight則在改變大小時按鈕將與窗體的下右邊緣保持相同的距離如果將Anchor屬性設置為AnchorStylesAll按鈕將與窗體的四周保持固定的距離按鈕就會改變自己的大小來符合這一要求
  Docking是Anchoring的一種特殊情況RichControl的Dock屬性定義控制與父控制的哪個邊相接觸它的值可以是TopLeftRightBottom或Fill當父控制的大小變化時它將仍然維持與特定邊緣的距離將一個控制移動到移動到父控制的底部並將Anchor設置為AnchorStyleBottomLeftRight等同於將Dock屬性設置為Bottom在本例中列表框與窗體的左邊緣相接觸按鈕與窗體的頂左和右邊保持一定的距離因此它們能夠維持相對的位置和大小下面例子中對話框(圖)是使用Visual Studio NET中的Win Forms Designer設計的在創建它時我用了分鐘的時間而沒有編寫一行代碼
 
 
 
 
  // ResizableSamplecs
  namespace ResizableSampleNamespace {
  using System;
  using SystemDrawing;
  using SystemComponentModel;
  using SystemWinForms;
  ///
  /// Summary description for ResizableSample
  ///
  public class ResizableSample : SystemWinFormsForm {
  ///
  /// Required by the Win Forms designer
  ///
  private SystemComponentModelContainer components;
  private SystemWinFormsButton button;
  private SystemWinFormsButton button;
  private SystemWinFormsButton button;
  private SystemWinFormsListBox listBox;
  public ResizableSample() {
  // Win Form Designer要求下面的初始化函數
  InitializeComponent()
  }
  ///
  /// 清除所使用的資源文件
  ///
  public override void Dispose() {
  baseDispose()
  componentsDispose()
  }
  ///
  /// 應用程序的主入口
  ///
  public static void Main(string[] args) {
  ApplicationRun(new ResizableSample())
  }
  ///
  /// Designer所需要的方法不要使用編輯器編輯其中的內容
  ///
  private void InitializeComponent()
  {
  ponents = new SystemComponentModelContainer()
  thisbutton = new SystemWinFormsButton()
  thisbutton = new SystemWinFormsButton()
  thisbutton = new SystemWinFormsButton()
  thislistBox = new SystemWinFormsListBox()
  //@design thisTrayLargeIcon = false;
  //@design thisTrayHeight = ;
  thisText = Resizable Dialog;
  thisIMEMode = SystemWinFormsIMEModeOff;
  thisAutoScaleBaseSize = new SystemDrawingSize(
  thisClientSize = new SystemDrawingSize(
  buttonLocation = new SystemDrawingPoint(
  buttonSize = new SystemDrawingSize(
  buttonTabIndex = ;
  buttonAnchor = SystemWinFormsAnchorStylesTopLeftRight;
  buttonText = Cancel;
  buttonLocation = new SystemDrawingPoint(
  buttonSize = new SystemDrawingSize(
  buttonTabIndex = ;
  buttonAnchor = SystemWinFormsAnchorStylesAll;
  buttonText = Filler;
  buttonLocation = new SystemDrawingPoint(
  buttonSize = new SystemDrawingSize(
  buttonTabIndex = ;
  buttonAnchor = SystemWinFormsAnchorStylesTopLeftRight;
  buttonText = OK;
  listBoxSize = new SystemDrawingSize(
  listBoxDock = SystemWinFormsDockStyleLeft;
  listBoxTabIndex = ;
  listBoxItemsAll = new object[] {Item OneItem TwoItem ThreeItem Four};
  thisControlsAdd(button
  thisControlsAdd(button
  thisControlsAdd(button
  thisControlsAdd(listBox
  }
  }
  }


From:http://tw.wingwit.com/Article/program/net/201311/13232.html
  • 上一篇文章:

  • 下一篇文章:
  • Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.