65.9K
CodeProject 正在变化。 阅读更多。
Home

创建自定义用户控件:基础 - I

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.53/5 (17投票s)

2007年1月9日

CPOL

6分钟阅读

viewsIcon

22680

创建自定义用户控件:基础 - I

引言

什么是控件?

控件是用户界面功能的重用组件。在 Windows 世界中,控件代表用户与应用程序交互的方式。它们允许用户输入和操作数据,对应用程序执行某些操作,输入数据,并以对人眼友好的方式显示数据。应用程序的界面由控件组成,其功能基于这些控件与底层代码之间的交互。

每个软件应用程序都有一个看不见的、执行实际工作的部分,以及一个提供用户界面的可见部分。控件是完整的软件元素,它们包含这两者:它们以图形化的方式显示在屏幕上,并且包含支持此界面的代码。

控件有两个主要功能

  1. 监听用户的命令并将其发送给应用程序
  2. 以用户能够理解的方式显示应用程序的结果

有趣的是,控件的整个概念根源于个人计算机的开发。开发人员必须模仿一些真实的控件,以提供良好的应用程序外观和感觉。让我们以一个常见的按钮为例。一个真实的按钮有不同的形状和大小,可以有多种状态,可以被按下,如果在释放时会恢复,或者按下时可能会发出声音。为了重现真实控件的特性,人们使用了许多技巧。

Sample screenshot

引入自定义控件

“自定义”这个词本身就很有表现力。虽然在许多开发任务中,您只能使用开发环境(在本例中为 .NET)提供的默认控件,但在许多其他情况下,您需要构建自己的控件。

顾名思义,定制的控件就是自定义控件。自定义控件是由您设计和编程的控件,它可以利用其他现有控件。有时自定义控件被称为第三方控件,以其来源命名。

Sample screenshot

由此可见,当 .NET Framework 提供的基本类或您可以从第三方购买的类不够用或价格过高时,创建自定义控件可能是一种必需。

通过将功能实现为自定义控件(在适当的情况下)可以提高编码效率,这一点可以通过一个例子来轻松说明。如果您需要在应用程序中使用带有不同元素的饼图来以优雅的图形方式呈现某些结果,有两种方法可以实现此解决方案。

  1. 1. 您可以直接在窗体中编写代码。首先,您需要绘制一个带有不同元素的饼图,并将其放置在特定位置。其次,您需要覆盖窗体的鼠标事件处理程序以获取图表的事件。第三,假设该图表具有某些功能,您需要通过将代码直接附加到窗体代码来实现所需模型。

    现在,如果您想在应用程序中有多个饼图,您需要为每个饼图执行上述三个步骤。之后,即使更改一些简单功能,例如将某个操作从左按钮移到右按钮,也需要执行三次。您的代码将包含大量重复的功能,并且难以阅读、理解、调试和扩展。更不用说每次修改图表时,您都必须重新构建整个应用程序。

  2. 您可以构建一个自定义控件。您将创建一个饼图自定义控件,该控件可以自行绘制,并具有自己的事件和事件处理机制。它将公开窗体中所需的各种属性和方法。然后,可以通过简单地设置其坐标来轻松地在使用它的窗体中更改此自定义控件的位置。此外,一旦创建了这个自定义控件,您将节省宝贵的时间,因为您在进行更改、添加额外功能和调试自定义控件方面所花费的时间将更短,并且代码修改将在一个地方进行——控件代码。

将功能打包成用户控件的形式带来了许多重要的好处

  1. 构建自定义控件有助于代码重用,因为同一个控件可以用于任意数量的窗体或选项卡(甚至其他自定义控件),而无需一遍又一遍地编写相同的代码。这可以节省大量的应用程序开发时间,并使应用程序代码变得更清晰。

  2. 它鼓励功能重用,遵循 OOP 的“黑盒子”原则。您不需要知道控件内部如何工作;您只需要知道它公开的公共接口。例如,考虑一个最简单的可用控件:Label 控件。在 Windows Forms 项目中使用标签时,您知道需要设置标签的 Text 属性来显示您想要的文本。您从不关心标签内部如何工作,以及它如何在屏幕上实际绘制该文本(即使对于像绘制一些文本这样简单的任务,也需要做工作,这可能不是显而易见的)。从这个简单的例子推断,您可以体会到黑盒概念如何应用于更复杂的控件。

  3. 它使应用程序代码保持简单。假设您的应用程序除了其他功能外,还需要知道如何播放声音。使用自定义控件来实现播放声音的功能可以最大程度地减少在应用程序窗体中编写的代码。您可以直接创建一个实现此功能的自定义控件,并通过应用程序可以使用的公共接口公开它,而不是创建按钮和组件,并在应用程序代码中添加和处理它们的事件。使用自定义控件可以使应用程序代码保持简单,因为功能实现在控件内部而不是在应用程序的窗体中。在极端情况下,一个窗体可以完全由相互交互的控件组成,而窗体本身不实现任何功能。

  4. 自定义控件可以像普通应用程序一样进行开发、编译、打包,甚至单独销售。这为您开发和使用控件的方式提供了极大的灵活性。

  5. 通过在控件中实现用户友好的代码和设计,构建自定义控件可以更轻松地改善应用程序的外观和可用性。如果您希望应用程序具有特定的外观,仅设置 .NET Framework 控件的属性是不够的。通过创建具有您想要的外观的自定义控件,您可以极大地改善应用程序的外观、感觉和功能。这是一种相对简单的方法,可以为您赢得更多满意的用户,因为为应用程序量身定制的用户界面比使用内置 .NET 控件构建的用户界面要用户友好得多。
© . All rights reserved.