用Visual C#开发简单的复合控件

2016-02-19 14:11 25 1 收藏

今天图老师小编给大家展示的是用Visual C#开发简单的复合控件,精心挑选的内容希望大家多多支持、多多分享,喜欢就赶紧get哦!

【 tulaoshi.com - 编程语言 】


     推荐:Visual C# 轻松入门全攻略

  本文介绍如何用Visual C# .NET 2002开发简单的复合控件(Composite Control),主要讲解控件开发过程中的属性(Property)和事件(Event)处理,以方便开发人员在.NET平台下根据自己的需要开发适合的控件。

  当我们在.NET平台下做Windows Forms开发时,常常需要为了某一特殊用途而把现有控件结合起来使用,比如结合了Label和TextBox的控件就非常容易在窗体上布局(记得Delphi 6里就有这么个控件),而结合了特定图案和文字的控件则非常适合显示公司的Logo。.NET平台就为我们提供了非常棒的工具和技术来创建这样的自定义控件。下面让我们来一起创作一个可以自动显示时间的控件。

  值得注意的是,.NET平台为我们提供了三种控件的开发技术,分别是:继承控件(Extended Control)、复合控件(Composite Control)和自定义控件(Custom Control)(译名可能会有所不同,大家可以以英文为准)。我们现在关心的是第二种——复合控件。OK,Let’s go!

  1.创建控件工程。

  在Visual C# .NET中新建一个“Windows控件库”项目,命名为“TimeLabel”

  2.更改命名空间、控件类名称。

  默认的命名空间是TimeLabel(和项目名称一样),控件类名称是UserControl1。请把命名空间改为与你的开发习惯一致,如我的是LeoYang.Controls.TimeLabel,当然你也可以选择保留默认命名空间;最好把控件类名称改为有意义的命名,如TimeLabel,这样当该控件出现在工具箱上时,就会显示为TimeLabel而不是UserControl1了。注意,一旦改动类名,则相应的Construction方法名称也要相应改掉,如:

public UserControl1()
{
 …
}
  就要改为:

public TimeLabel()
{
 …
}
  3.添加现有控件。

  由于我们是要在现有控件的基础上创建新控件,所以就应该先把可用的现有控件添加到控件设计界面上。请在“工具箱”中双击Label,再双击Timer,两个现有控件依次被添加到我们的设计界面上,如图2:


用Visual C# .NET开发简单的复合控件(图一)

  4.公布控件属性

  因为要把时间写入Label的Text属性中,所以我们需要把label1.Text属性公开。请在TimeLabel类中加入以下代码:

public string LabelText
{
 get
 {
  return label1.Text;
 }
}
  注意,这里我们不需要让控件使用者改变label1.Text的值,所以LabelText是个只读属性。

  另外,出于美观的考虑,我们这里还要向控件使用者公开一个LabelBackColor属性,用于获得和设置Label的BackColor属性。代码如下:

public Color LabelBackColor
{
 get
 {
  return label1.BackColor;
 }
 set
 {
  label1.BackColor=value;
 }
}
  当然,你也可以根据需要再增加一些属性,如字体、控件大小等,让控件使用者可以更加灵活地使用控件。
  
  到这里,我需要向大家补充一点,复合控件创建中的很重要的一条是:任何构成控件(Constituent Control)的属性必须要通过加入复合控件的属性来公开,而不要直接把构成控件直接以public级别公开。比如说上面,我们就不应把Label控件的访问级别设为public来直接公开(默认是private)。这样作的目的是让我们能更好地把握控件的数据安全,从而只把那些最需要的属性公开给控件用户。

  5.时间显示的处理。

  到现在,我们就可以增加代码来让我们的控件显示时间了。首先请把timer1的Interval属性设为1000,也就是1秒的时隔。然后双击timer1,在其Tick事件处理过程中增加以下代码:

label1.Text=System.DateTime.Now.ToLongTimeString();
  这样,每隔一秒钟,我们的Label就会重新显示当前系统时间。最后,请双击TimeLabel控件上的空白处,在出现的TimeLabel_Load事件处理过程中增加以下代码来激活Timer:

timer1.Enabled=true;
  这样,Timer就会忠心耿耿地开始计算时间,并更新Label上的时间文字了。

  6.事件处理。

  由于是继承自UserControl的控件,所以TimeLabel从一开始便拥有了Click、DragDrop、FontChanged等事件。我们现在要做的是增加一个自定义事件——Tick,以便通知使用我们控件的窗体时间已经改变了。因为我们只需要简简单单地让这个事件发生,所以不需创建我们自己的代理(delegate)函数,也不需创建特殊的事件处理事据对象。OK,请看下面的代码:

  首先在TimeLabel类里增加Tick事件声明:

public event EventHandler Tick;
  然后给该事件编写一个调用过程,请注意该过程的命名:

protected void OnTick (EventArgs e)
{
 if(Tick!=null)
 {
  Tick(this, e);
 }
}
  另外,在上面处理过的Timer的Tick事件处理过程中,还应增加对OnTick的调用,代码如下:

private void timer1_Tick(object sender, System.EventArgs e)
{
 label1.Text=System.DateTime.Now.ToLongTimeString();
 OnTick(e);
}
  7.创建试验项目。

  在Visual C# .NET中通过“文件”-“添加项目”-“新建项目”,创建一个新的Windows应用程序,命名为TestTimeLabel,并添入当前解决方案中,如图3:

用Visual C# .NET开发简单的复合控件(图二)

  8.添加控件引用。

  在使用自定义控件之前,我们必须把控件添加到“工具箱”中。方法是:右击“工具箱”,点选“自定义工具箱”,在弹出的“自定义工具箱”对话框中选择“.NET框架组件”页,然后点击“浏览”,定位并打开我们刚才所创建的TimeLabel控件专有程序集(TimeLabel.dll),使该控件出现在“.NET框架组件”列表中,如图4所示:


用Visual C# .NET开发简单的复合控件(图三)

   点击“确定”即可把TimeLabel控件添加到“工具箱”中,如图5所示:


用Visual C# .NET开发简单的复合控件(图四)

  9.使用控件。

  现在,我们就可以把我们创建的TimeLabel像其它控件一样拖放到Windows窗体上,设置它的属性和响应它的事件了。比如,可以在属性窗口中设置TimeLabel的LabelBackColor为你喜欢的颜色。当然,除LabelBackColor以外,还有大量的属性可供设置,而且如果大家愿意,还可以回到TimeLabel项目中再用上面说过的方法增加其它的属性,从而使控件功能和用户界面更加丰富。

  10.响应事件。

  前面我们给TimeLabel增加了一个Tick事件,每当时间显示改变之后发生。那么我们的程序怎样知道Tick事件已经发生、并对它做出反应呢?方法如下:

  首先增加事件处理过程如下(名称可以自定,但必须要有object和EventArgs类型的参数,并且以void类型返回):

private void TickHandler(object sender, EventArgs e)
{
 System.Diagnostics.Debug.WriteLine(timeLabel1.LabelText);
}
  其次,在Form.InitializeComponent过程中把上述过程注册给TimeLabel的Tick事件:

this.timeLabel1.Tick+=new EventHandler(this.TickHandler);
  这样,我们的试验项目就已经完成,可以调试了。试验程序启动界面如图6:

用Visual C# .NET开发简单的复合控件(图五)

  同时,在调试器的输出窗口中,每隔一秒都会有一条新的Debug记录写入,内容是TimeLabel的LabelText属性(即所显示的时间)。这说明我们的事件处理成功了:)

  后记:本文通过一个简单的demo演示了如何使用Visual C# .NET创建一个简单的复合控件。大家可以按照项目或学习的实际需要来把这个例子进一步完善(比如说可以给控件增加自定义的图标等)。
     推荐:Visual C# 轻松入门全攻略

  本文介绍如何用Visual C# .NET 2002开发简单的复合控件(Composite Control),主要讲解控件开发过程中的属性(Property)和事件(Event)处理,以方便开发人员在.NET平台下根据自己的需要开发适合的控件。

  当我们在.NET平台下做Windows Forms开发时,常常需要为了某一特殊用途而把现有控件结合起来使用,比如结合了Label和TextBox的控件就非常容易在窗体上布局(记得Delphi 6里就有这么个控件),而结合了特定图案和文字的控件则非常适合显示公司的Logo。.NET平台就为我们提供了非常棒的工具和技术来创建这样的自定义控件。下面让我们来一起创作一个可以自动显示时间的控件。

  值得注意的是,.NET平台为我们提供了三种控件的开发技术,分别是:继承控件(Extended Control)、复合控件(Composite Control)和自定义控件(Custom Control)(译名可能会有所不同,大家可以以英文为准)。我们现在关心的是第二种——复合控件。OK,Let’s go!

  1.创建控件工程。

  在Visual C# .NET中新建一个“Windows控件库”项目,命名为“TimeLabel”

  2.更改命名空间、控件类名称。

  默认的命名空间是TimeLabel(和项目名称一样),控件类名称是UserControl1。请把命名空间改为与你的开发习惯一致,如我的是LeoYang.Controls.TimeLabel,当然你也可以选择保留默认命名空间;最好把控件类名称改为有意义的命名,如TimeLabel,这样当该控件出现在工具箱上时,就会显示为TimeLabel而不是UserControl1了。注意,一旦改动类名,则相应的Construction方法名称也要相应改掉,如:

public UserControl1()
{
 …
}
  就要改为:

public TimeLabel()
{
 …
}
  3.添加现有控件。

  由于我们是要在现有控件的基础上创建新控件,所以就应该先把可用的现有控件添加到控件设计界面上。请在“工具箱”中双击Label,再双击Timer,两个现有控件依次被添加到我们的设计界面上,如图2:


用Visual C# .NET开发简单的复合控件(图一)

  4.公布控件属性

  因为要把时间写入Label的Text属性中,所以我们需要把label1.Text属性公开。请在TimeLabel类中加入以下代码:

public string LabelText
{
 get
 {
  return label1.Text;
 }
}
  注意,这里我们不需要让控件使用者改变label1.Text的值,所以LabelText是个只读属性。

  另外,出于美观的考虑,我们这里还要向控件使用者公开一个LabelBackColor属性,用于获得和设置Label的BackColor属性。代码如下:

public Color LabelBackColor
{
 get
 {
  return label1.BackColor;
 }
 set
 {
  label1.BackColor=value;
 }
}
  当然,你也可以根据需要再增加一些属性,如字体、控件大小等,让控件使用者可以更加灵活地使用控件。
  
  到这里,我需要向大家补充一点,复合控件创建中的很重要的一条是:任何构成控件(Constituent Control)的属性必须要通过加入复合控件的属性来公开,而不要直接把构成控件直接以public级别公开。比如说上面,我们就不应把Label控件的访问级别设为public来直接公开(默认是private)。这样作的目的是让我们能更好地把握控件的数据安全,从而只把那些最需要的属性公开给控件用户。

来源:http://www.tulaoshi.com/n/20160219/1606399.html

延伸阅读
摘要:本文讨论基于套接字(socket)的体系结构以及怎样建立一个高效的、易于使用的、可以同时在PC和Pocket PC上运行的消息传递(message-passing)系统。 套接字和消息 目前,大多数Web服务和所有的远程应用程序都使用了远程过程调用(remote-procedure-call,RPC)方法。你所做工作好像是在调用一个函数,但是在其后台执行了大...
Microsoft.Net Framework为应用程序访问Internet提供了分层的、可扩展的以及受管辖的网络服务,其名字空间System.Net和System.Net.Sockets包含丰富的类可以开发多种网络应用程序。.Net类采用的分层结构允许应用程序在不同的控制级别上访问网络,开发人员可以根据需要选择针对不同的级别编制程序,这些级别几乎囊括了Internet的所有需要--从...
Visual C#是微软公司推出的新一代程序开发语言,是微软.Net框架中的一个重要组成部分。屏幕保护程序是以scr为扩展名的标准Windows可执行程序。屏幕保护程序不仅可以延长显示器的使用寿命,还可以保护私人信息。本文向大家介绍一个.Net平台上用C#编写的一个动态文本及图形的屏幕保护程序。 一、具体实现步骤: (1)在Visual Stud...
Api函数是构筑Windws应用程序的基石,每一种Windows应用程序开发工具,它提供的底层函数都间接或直接地调用了Windows API函数,同时为了实现功能扩展,一般也都提供了调用WindowsAPI函数的接口, 也就是说具备调用动态连接库的能力。Visual C#和其它开发工具一样也能够调用动态链接库的API函数。.NET框架本身提供了这样一种服务,允许受管辖的代...
本文向大家介绍Windows Sockets的一些关于用C#实现的原始套接字(Raw Socket)的编程,以及在此基础上实现的网络封包监视技术。同Winsock1相比,Winsock2最明显的就是支持了Raw Socket套接字类型,使用Raw Socket,可把网卡设置成混杂模式,在这种模式下,我们可以收到网络上的IP包,当然包括目的不是本机的IP包,通过原始套接字,我们也可以...

经验教程

463

收藏

32
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部