鏀惰棌 (0) +1 璧� (0) +1 韪� (0) +1
鏀惰棌鎴愬姛鏌ョ湅鏀惰棌>>

正在阅读:构建一个弹出式图象按钮构建一个弹出式图象按钮

2004-02-14 09:34 出处:PConline 作者:webasp 责任编辑:huangpeidan
这一点会对你将来构建控件有所影响,因此为了让你有更全面的了解我将从另一个角度对它进行讲述。如果你通过覆盖一个OnPaint 来支持你自己的作品(就是说用于一个标准的Button基类),而且你不仅仅想要实现基类所完成绘制,那么你的OnPaint覆盖中就不应该包含MyBase.OnPaint调用。在这个场景中,如果你还想为使用派生控件的开发人员提供一个Paint事件,则必须在基类中提供一个Paint事件声明。如果基类中已存在了一个Paint事件,你则必须用Shadows关键字来声明你自己的事件从而将基类的事件隐藏起来。不要轻易尝试使用Shadows,因为它容易让使用该控件的开发人员搞糊涂,虽然在一个事件中使用这种方法看起来似乎更安全。   Shadows只是用一个和基类相似的名称向用户显示一种方法的派生版本。它所存在的潜在问题是用户仍然可以通过用CType将你的类中的对象转化为基类来得到基类中的方法。Control类中的一些方法对ImageButton来说是没有用的。比如,不需要Text属性。你可以在Visual Studio的 Properties窗口中将Control.Text用一个ReadOnly属性替换掉,返回一个空串。   前面这段代码不会导致出错,但却不会真正起什么作用;ImageButton不会通过其基类的Text属性来绘制控件。然而,如果用户尝试填写ImageButton的Text属性则会导致产生一个design-time(编译)只读错误。   最后,通过将属性添加到声明中来把Text属性隐藏起来。它还要求你给用户提供一个新的缺省属性,否则是无效的,因为Control的缺省属性是Text。通过将添加到类声明中来将DisplayImageIndex属性作为新的缺省属性。   涂成蓝色   和菜单按钮一样,ImageButton必须带有不同的图象和边框式样,这取决于鼠标的位置。和菜单按钮不同的是,ImageButton必须能够获得焦点并显示焦点矩形框。所有的特性都必须通过代码来实现,因为Control类不会处理。然而,你只需一小段代码就可以实现它,就像你从OnPaint过程中看到的那样。   你可以通过OnMouseEnter、Leave、Up和Down覆盖过程从系统中获得鼠标通知。你可以象使用一般的mouse事件一样来使用它们,但是用覆盖意味着你能够在基类提供行为之前或之后添加新的行为,或者取代基类的行为。通过设置一个MouseButtonState变量,你可以用每个过程来决定将哪个图象拖到控制界面。OnMouseDown还会设定焦点: Overrides Sub OnMouseDown(ByVal ma As _ MouseEventArgs) MyBase.OnMouseDown(ma) _MouseButtonState = Down Me.Focus() MyBase.Invalidate() End Sub
键盘也能翻页,试试“← →”键

关注我们

最新资讯离线随时看 聊天吐槽赢奖品
鎵嬫満璁块棶鍥炲埌椤堕儴