我爱Aspx >> VB.Net >> 构建一个弹出式图象按钮Me.Focus()
MyBase.Invalidate()
End Sub
Control.Invalidate调用用于告知基类该控件需要被重画。基类依次调用覆盖的OnPaint方法,它通过PaintEventArgs来提供一个GDI+ 图象对象。你可以用该对象共享的DrawImage方法用一行代码绘制一个位图(bitmap),给DrawImage提供图象、位置和大小,选择将哪个图象绘制到鼠标位置。一个很方便的设计态专用的DisplayImageIndex属性会让用户自己选择将哪种图象显示出来。你可以将两种属性用在该方法的声明中:<Category ("Design")>用于告诉Visual Studio属性窗口该在哪里列出该属性,<DesignOnly(True)>用于在运行时将它隐藏起来。给DisplayImageIndex值添加一个枚举,使用户可以通过简单地点击这个值来查看到Down、Up和Hover。DisplayImageIndex使用户无需打开ImageList控件来确保他们选择了正确的用于Down、Up和Hover的ImageIndex值。
你可以用鼠标位置来选取需要绘制的边框颜色。当焦点集中在控件上时,代码将边框厚度设置为两个象素点,只用于UP状态。建立一个新的Pen对象(不要用缺省的系统的画笔)画出大于一个象素点的一行。不要忘记在完成时调用Dispose方法。你应该根据边框的宽度调整边框矩形的大小,因为控件不能随意在窗体以外进行绘制。
我从来不喜欢用按钮图象的算法操作来显示up、over和down状态,每个ImageButton均用了三个单独的位图。在一个form中使用许多ImageButtons会导致产生大量的图象,因此我给ImageButton提供了一个ImageList属性,而不是三个图象属性。将该属性作为Forms.ImageList来声明,则NET和VS.NET IDE会为你处理大量的工作。你不需要通过编写代码来检测ImageList,属性窗口会将它显示出来。使用ImageList的另一个好处是它排除了用代码处理用户提供图象大小的可能性。当用户以不同的大小加载它时,ImageList代表的是一个单一大小和比例的图象。
图象的大小决定了ImageButton的大小;该控件没有AutoSize属性。假如用户试图通过拖动控件的边框或通过属性窗口来改变它的大小,则ImageButton会立即重新设置为图象的大小。你可以通过覆盖OnSizeChanged过程来得到该行为,你还可以用一个只读版本将Control类的非覆盖Size属性隐藏起来。这给IDE带来了一个问题,因为他要序列化Size属性,试着将它设置到用户窗体的"Designer generated code"区域。添加<DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)>属性以避免用户在设计时读取它的属性序列化时,它提供一个更友好的工具给用户。
【我对这篇文章有话说?】
在VB.NET中调试存储过程[05-20]
VB.NET开发扫描客户端服务工具[05-20]
消息队列在VB.NET数据库开发中的..[05-20]
VB.NET中实现关机/休眠/重启/注销..[05-20]
VB.NET实现五子棋的人工智能(1)[05-20]
VB.NET实现五子棋的人工智能(2)[05-20]
在.NET环境下将报表数据导出EXCE..[05-20]
在.NET中应用MATLAB算法[05-20]
.NET环境下几种不同的邮件发送解..[05-20]
在VB.NET中改变显示器的分辩率[05-20]