重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
首先,你已经完成的步骤是:
创新互联-专业网站定制、快速模板网站建设、高性价比柳江网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式柳江网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖柳江地区。费用合理售后完善,十余年实体公司更值得信赖。
1.新建一个用户控件[注意,用户控件(UserControl)不是自定义控件(CustomControl)]
2.给用户控件起个名字(我在此处起名叫 RadioList)
3.在用户控件上画一个 GroupBox,命名为 RadioGroup,
并将其 Dock 属性设置为 Fill
然后,你需要做的是动态增减控件。
如果你以前用过 VB 6,你可能会想到控件数组,
但在此处,你可以直接增删控件。
具体实现如下:
4.在 GroupBox 里画一个 FlowLayoutPanel,命名为 RadioPanel,
将其 AutoScroll 属性设置为 True,即自动显示滚动条,
并设置其 FlowDirection 属性(例如设置为 TopDown)
这样就省去了手动调整 RadioButton 位置的麻烦
5.实现选项的动态增减(以下只是我的思路,你可以发挥一下)
(十分简洁,注释除外):
''' summary
''' 创建一个新的 RadioButton。
''' /summary
Private Function CreateRadio() As RadioButton
Dim NewRadio As New RadioButton
components.Add(NewRadio)
'components 字段由控件设计器自动创建,
'此代码目的是使控件在销毁(Dispose)时能自动销毁 RadioButton
'详情参见 RadioList.Designer.vb
NewRadio.Parent = RadioPanel
'设置容器
AddHandler NewRadio.CheckedChanged, AddressOf RadioButtons_CheckedChanged
'设置事件处理程序
Return NewRadio
End Function
''' summary
''' 移除已存在的 RadioButton。
''' /summary
Private Sub RemoveRadio(ByVal dest As RadioButton)
components.Remove(dest)
dest.Dispose()
End Sub
'无中生有的 RadioButton 的事件处理程序
Private Sub RadioButtons_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
'在此处设置选中项的属性,通过 sender 来确定不同的 OptionButton
'你可以通过将 OptionButton 放在一个列表,
'如 List(Of OptionButton) 中来像数组一样维护选项的次序
'注意,此处需要判断 sender 的 Checked 属性是否为 True
'因为 Changed 是“改变”,而不是“选中”
'例如:
If DirectCast(sender, RadioButton).Checked Then
SelectedIndex = ...
End If
End Sub
新建一个Winform,在和Form1平行的位置粘贴如下代码
Public Class MyLabel Inherits Label Protected Overrides Sub OnPaint(e As PaintEventArgs) e.Graphics.DrawEllipse(New Pen(Color.Red), New Rectangle(2, 2, 10, 10)) MyBase.OnPaint(e) End Sub End Class
运行,停掉,在工具箱找到MyLabel,拖动就可以看到效果。这只是最基本的重写,要模仿QQ还需要其他技术以及美工。
要么重写这个控件的 OnPaint 事件,判断 BorderStyle 属性为 FixedSingle 的时候自绘其他颜色。
要么不重写,把 BorderStyle 设为 None,直接在这个控件的 Paint 事件里自绘边框,例如:
Private Sub Label1_Paint(sender As Object, e As PaintEventArgs) Handles Label1.Paint
e.Graphics.DrawRectangle(Pens.Red, New Rectangle(Label1.DisplayRectangle.X, Label1.DisplayRectangle.Y, Label1.DisplayRectangle.Width - 1, Label1.DisplayRectangle.Height - 1))
End Sub
运行效果:
题外话,从JAVA转过来的,为什么不用C#,毕竟JAVA和C#接近
添加事件处理程序借助设计器就可以了.我下面说的是如何用代码处理
在用户控件的构造函数Sub New()里添加代码注册事件处理函数
AddHandler ToolStripMenuItem1.Click, AddressOf MyHandler
然后实现这个处理函数
Sub MyHandler(sender As Object, e As EventArgs)
'在这里处理这个菜单命令
End Sub