程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#基礎知識 >> 在C#中使用.NET SDK創建控制

在C#中使用.NET SDK創建控制

編輯:C#基礎知識
下載示例工程 - 8 Kb

介紹

在這篇教程中,我將使用.NET架構創建一個簡單的時鐘控制示例,這個控制是一個顯示當前時間的時鐘,
我將指導讀者實現秒針並顯示鐘點數。
文章加亮處是創建這個控制的關鍵點,讀者可以參考其中的代碼。創建一個控制的最快的方法是從這裡拷
貝一個控制示例代碼:

..Program FilesNGWSSDKSamplesQuickStartwinformssamplesCsWritingControlshelloworldcontrol

將目錄拷貝到 MyControl目錄

..Program FilesNGWSSDKSamplesQuickStartwinformssamplesCsWritingControlsMyControl

將目錄下的Hellowordlcontrol文件重命名為myControl.

  • Helloworldcontrol.cs -> mycontrol.cs
  • Helloworldcontrol.src -> mycontrol.src

將下列文件中的helloworldcontrol改為myControl:

  • Hostapp.cs
  • Makefile

打開控制台窗口輸入 NMAKE ALL. 將建立下列兩個文件:

  • MyControl.exe – The application that hosts the control
  • MyControl.DLL – The actual control.

現在基本的框架代碼已經建立好了,我們可以通過運行mycontrol.exe來測試。

現在我們可以開始編寫我們的控制.

  1. 我們需要添加一些即將使用的 namespaces, namespace包含了我們在控制中所涉及到的類 :

    using System.ComponentModel;// Needed for control support
    
    using System.Timers; // Needed to support timer
    
    using System.Runtime.InteropServices;// Needed for StructLayout attribute 
    
    
  2. 下一步是包含一些允許調用WINDOWS操作系統功能的C#擴展特性,我無法找到一個類似
    獲得系統時間的函數,所以我作了如下定義:
    // Definition of WINAPI SYSTEMTIME structure 
    
    [StructLayout(LayoutKind.Sequential)]
    
    public class SystemTime {
    
     public ushort wYear;
    
     public ushort wMonth;
    
     public ushort wDayOfWeek;
    
     public ushort wDay;
    
     public ushort wHour;
    
     public ushort wMinute;
    
     public ushort wSecond;
    
     public ushort wMilliseconds;
    
    }
    
    
    
    // Definition of WINAPI GetLocalTime function[DllImport("Kernel32.dll")]
    
    public static extern void GetLocalTime(SystemTime st);
    
    
  3. 現在我們申明一些在對象運行期間將被使用的成員變量。
    private Colorm_colorHands;private Colorm_colorFace;
    
    private boolm_bActivateClock;
    
    private System.Timers.Timer m_timer;
    
    

    這裡要注意的是,要在聲明任何變量之前引入關鍵字,而不是像C++那樣可以跟變量一起定義。

  4. 定義構造函數.

    跟Java類似,方法可以在內部編寫,將來雖然需要經常修改,但修改變得簡單易行了。

    public MyControl(){
    
     m_colorHands = Color.White;
    
     m_colorFace = Color.Blue;
    
     SetStyle(ControlStyles.Opaque, false);
    
     SetStyle(ControlStyles.ResizeRedraw, true);
    
    }
  5. 下一步是定義一些屬性,這裡包含了一個新的功能:屬性標記,他將為其它子系統提供運行時庫信息。
    [
    
    Category("Clock"),
    
    Description("Hands color for Clock"),
    
    DefaultValue(0xFFFFFF),
    
    ]
    
    public Color HandsColor {
    
     get {
    
      return m_colorHands;
    
     }
    
    
    
     set {
    
      m_colorHands = value;
    
      Invalidate();
    
      Update(); 
    
     }
    
    }

    括弧[ ]中的代碼定義了特定的屬性, get 和 set 函數對於對象外面也是可用的,
    要想修改時鐘指針的顏色,你可以這樣做:

    someobj.HandColor = Color.Red;

    此句隱含調用了set函數。

  6. 重載基類函數
    protected override void OnPaint(PaintEventArgs pe) {
    
     // Let base class draw its stuff first
    
     base.OnPaint(pe);
    
    
    
     // Draw code here...
    
    }

    請注意用來重載基類函數的關鍵字 override

    這段代碼調用了基類函數 OnPaint (base.OnPaint(pe); )

在代碼中其它有價值的地方是:對象建立在堆上,且不需要象C++中進行delete操作. NWGS 中的垃圾
收集功能將會對用NEW分配的對象進行回收。

例如:

{

 // ... Some code

 SolidBrush brush = new SolidBrush(Color.White)



 // Scope ends... no delete operator needed for brush

}
C#的另一個特性時在調用函數時更改變量的取值。

請看如下代碼:

CalculatePoint(ptStart, out ptEnd,(st.wHour*5)+(st.wMinute/12), false, rc);

請注意 out 參數,這樣定義當進入函數後變量將被更改。

我們可以這樣定義:

protected void CalculatePoint(Point pStart, out Point pEnd, 

                              int nPos, bool bFlag, Rectangle rc)

Mycontrol.exe 已經建好了,另一種測試控制的方法是運行 WinDes.exe, 然後建立一個新的 C# Win32Form,
選擇Library 菜單下Edit/Add 並且選擇 mycontrol.dll

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved