首先,你已經(jīng)完成的步驟是:
專注于為中小企業(yè)提供成都網(wǎng)站設(shè)計、網(wǎng)站制作、外貿(mào)營銷網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)右玉免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了成百上千企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
1.新建一個用戶控件[注意,用戶控件(UserControl)不是自定義控件(CustomControl)]
2.給用戶控件起個名字(我在此處起名叫 RadioList)
3.在用戶控件上畫一個 GroupBox,命名為 RadioGroup,
并將其 Dock 屬性設(shè)置為 Fill
然后,你需要做的是動態(tài)增減控件。
如果你以前用過 VB 6,你可能會想到控件數(shù)組,
但在此處,你可以直接增刪控件。
具體實(shí)現(xiàn)如下:
4.在 GroupBox 里畫一個 FlowLayoutPanel,命名為 RadioPanel,
將其 AutoScroll 屬性設(shè)置為 True,即自動顯示滾動條,
并設(shè)置其 FlowDirection 屬性(例如設(shè)置為 TopDown)
這樣就省去了手動調(diào)整 RadioButton 位置的麻煩
5.實(shí)現(xiàn)選項的動態(tài)增減(以下只是我的思路,你可以發(fā)揮一下)
(十分簡潔,注釋除外):
''' summary
''' 創(chuàng)建一個新的 RadioButton。
''' /summary
Private Function CreateRadio() As RadioButton
Dim NewRadio As New RadioButton
components.Add(NewRadio)
'components 字段由控件設(shè)計器自動創(chuàng)建,
'此代碼目的是使控件在銷毀(Dispose)時能自動銷毀 RadioButton
'詳情參見 RadioList.Designer.vb
NewRadio.Parent = RadioPanel
'設(shè)置容器
AddHandler NewRadio.CheckedChanged, AddressOf RadioButtons_CheckedChanged
'設(shè)置事件處理程序
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)
'在此處設(shè)置選中項的屬性,通過 sender 來確定不同的 OptionButton
'你可以通過將 OptionButton 放在一個列表,
'如 List(Of OptionButton) 中來像數(shù)組一樣維護(hù)選項的次序
'注意,此處需要判斷 sender 的 Checked 屬性是否為 True
'因為 Changed 是“改變”,而不是“選中”
'例如:
If DirectCast(sender, RadioButton).Checked Then
SelectedIndex = ...
End If
End Sub
'把圖片的聲明放在外面,類里面過程外面,而且要用As,不然等會兒沒法用
Dim myPicture As New System.Windows.Forms.PictureBox()
'動態(tài)生成的控件,加一行
Private Sub UserControl1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Me.Panel3.Controls.Add(myPicture)
myPicture.Size =New System.Drawing.Size(115, 160)
myPicture.TabStop =False
myPicture.Name ="p"
myPicture.Cursor = Cursors.Hand
AddHandler myPicture.Click, AddressOf mypic_Click '添加事件
AddHandler returnid, AddressOf idReturned '綁定事件和過程
End Sub
'再來個事件,放在聲明的地方,就是類里面、過程外面
Private Event returnid(ByVal id As String) '這個事件可以傳遞值哦~
'普通的單擊事件
Private Sub mypic_Click()
RaiseEvent returnid(myPicture.Name)
End Sub
'會傳值的事件過程
Private Sub idReturned(ByVal id As String)
Dim bookInfo As New BookInfo
bookInfo.Show()
Me.Parent.Enabled = False
'用id變量做點(diǎn)什么吧
End Sub
如果要改事件的簽名(參數(shù)一類的)的話,得重寫控件。你可以這樣自己弄一個事件。
新建一個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
運(yùn)行,停掉,在工具箱找到MyLabel,拖動就可以看到效果。這只是最基本的重寫,要模仿QQ還需要其他技術(shù)以及美工。