• 您的位置我爱Aspx >> VB.Net >> 构建一个弹出式图象按钮
  • 构建一个弹出式图象按钮

  • 作者:aspxer  来源:internet  日期:2007-5-20 14:01:19  关键字:
  • 构建一个弹出式图象按钮

    ndows控件并不是一件特别复杂的事情。我曾在以前的文章中讲过如何通过最专业的技术来构建复杂的控件,但这并不意味着构建所有控件都是那么复杂。本文我将用一种曾在我的工作中遇到的简单方法来解决一个真实领域中的问题。就算你只有一些或者完全没有什么构建控件的经验,你也可以用它来实现在你的桌面应用程序中加入复杂的功能。

    我需要一个带有不同图象的弹出式按钮,用于实现常规的、mouse-hover和mouse-down状态。我可以用一个常规的WinForm按钮来实现大多数我想要的效果,但却不能实现给边框加上颜色。我还想要让图象移到按钮的右边缘,就象菜单按钮那样。确切地说,我是需要一个能够代表其本身功能的菜单按钮。

    你可以用大约150行的代码来构建这个控件;最长的过程包含约25行代码。这个方法是一个很好的起点;你可以给它添加许多性能并可以将它当作一个其他类型控件的模式。该过程的属性或许是这个项目中最为复杂的一个地方了――对.NET提供的经过深思熟虑的基类的一个确实的证明。

    基本的方法是以一个已经存在的控件开始并通过继承来添加或改变其行为。控件的Paint事件允许你在窗体中进行随意绘制。对listbox或treeview来说,完成这个功能可能需要做很多工作,但对按钮来说,只需用图象作为表面就可以了。你可以通过从Button类中派生出你所需要的ImageButton类,用一个Button控件的Paint事件来绘制出适当的图象。然而,对于一个弹出式按钮来说,象Image、FlatStyle和AutoSize这样的Button属性是没有意义的。作为替代,你可以从Control基类中派生它并自己为它加上边框。这样做并不需要你编写额外的代码,它会生成一个更有效的控件和一个用于构建其他控件窗体的通用模板。

    一个弹出式按钮的行为是很简单的。它有三种状态,每种状态都带有一个边框和一个图象。Control基类支持一组可以被覆盖(override)的Mouse过程,以及Paint程序。你可以通过简单地从Windows.Forms.Control派生来开始一个程序。奇怪的是,Control基类不是一个“必须继承类”(通常被成为抽象类),就是说以该类为基类进行派生时,你无需覆盖任何方法。覆盖是指Windows和.NET允许你在某人或某个东西(即系统)调用了基类的方法时执行你自己的代码。这一点非常有用。

    我对这篇文章有话说?
  • 广告位招租,广告代号:content_468_15
  • 上一篇:掌握ADO.NET的十个热门技巧
    下一篇:在VB.NET中调试存储过程
  • 相关文章