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

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

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

..\Program Files\NGWSSDK\Samples\QuickStart\winforms\samples\Cs\WritingControls\helloworldcontrol

將目錄拷貝到 MyControl目錄

..\Program Files\NGWSSDK\Samples\QuickStart\winforms\samples\Cs\WritingControls\MyControl

將目錄下的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來測試。


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

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

using System.ComponentModel;// Needed for control support
using System.Timers; // Needed to support timer
using System.Runtime.InteropServices;// Needed for StructLayout attribute


下一步是包含一些允許調用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);

現在我們申明一些在對象運行期間將被使用的成員變量。
private Colorm_colorHands;private Colorm_colorFace;
private boolm_bActivateClock;
private System.Timers.Timer m_timer;

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

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

public MyControl(){
m_colorHands = Color.White;
m_colorFace = Color.Blue;
SetStyle(ControlStyles.Opaque, false);
SetStyle(ControlStyles.ResizeRedraw, true);
}
下一步是定義一些屬性,這裡包含了一個新的功能:屬性標記,他將為其它子系統提供運行時庫信息。

[
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函數。

重載基類函數

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