思路
成都創(chuàng)新互聯(lián)公司2013年至今,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都做網(wǎng)站、成都網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元洪山做網(wǎng)站,已為上家服務(wù),為洪山各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:028-86922220
兩種方式:
1、通過(guò)動(dòng)態(tài)按鈕方式創(chuàng)建,
2:通過(guò)控件數(shù)組方式創(chuàng)建。
個(gè)人傾向于通過(guò)控件數(shù)組的方式。一般應(yīng)用都是有規(guī)律的創(chuàng)建的,所以用控件數(shù)組合適些。
舉例
'?先在窗體上添加一個(gè)標(biāo)準(zhǔn)按鈕
'?在屬性窗口中,把它的?Index屬性設(shè)置成?0
'????????名稱改為?cmdDynCmd?(其它的名稱也行,注意后面的說(shuō)明)
'????????Visible?可以設(shè)置成?False
Option?Explicit
Private?lCmdIndex?As?Long
Private?Sub?LoadCmdButton()
'這兒就是加載動(dòng)態(tài)按鈕的
Dim?i
For?i?=?0?To?NNN???'這兒NNN等于你需要的按鈕數(shù)減1,可以用變量的
'你應(yīng)該能通過(guò)你的“數(shù)據(jù)庫(kù)中"a"表中"名稱"字段”項(xiàng)目數(shù)?來(lái)確定值為多少
'?***?注意這兒的?cmdDynCmd?就是設(shè)計(jì)時(shí)確定的按鍵名稱?***
If?(lCmdIndex??0)?Then?Load?cmdDynCmd(i)
cmdDynCmd(i).Visible?=?True
'這兒的?Caption?屬性,你自己用代碼跟你的?數(shù)據(jù)庫(kù)中"a"表中"名稱"字段內(nèi)容關(guān)聯(lián)
cmdDynCmd(i).Caption?=?"動(dòng)態(tài)按鈕"??i?+?1
'這兒的?x?、y?你可以根據(jù)?i?的值來(lái)進(jìn)行計(jì)算
cmdDynCmd(i).Top?=?X
cmdDynCmd(i).Left?=?Y
'直接?cmdDynCmd(i).move?x,?y也行
next
End?Sub
'?這兒就是動(dòng)態(tài)按鈕的事件代碼
'?根據(jù)?Index?判斷是哪個(gè)按鈕觸發(fā)了事件
'?跟你事先設(shè)計(jì)好的控件數(shù)組完全是相同的用法
'?*****?注意?。?!注意這兒的?cmdDynCmd?就是設(shè)計(jì)時(shí)確定的按鍵名稱
Private?Sub?cmdDynCmd_Click(Index?As?Integer)
MsgBox?"你點(diǎn)擊的是第?"??Index?+?1??"?個(gè)動(dòng)態(tài)按鈕。",?64
'具體事件代碼只能你自己寫
End?Sub
Dim?I?As?Integer
Private?Sub?Button1_Click(ByVal?sender?As?System.Object,?ByVal?e?As?System.EventArgs)?Handles?Button1.Click
Button1.Text?=?"繼續(xù)"
TextBox1.Text?=?I
I?=?I?+?1
End?Sub
Private?Sub?Form1_Load(ByVal?sender?As?System.Object,?ByVal?e?As?System.EventArgs)?Handles?MyBase.Load
I?=?2
End?Sub
代碼如上 如圖的效果
本來(lái)有個(gè)屬性FlatStyle設(shè)置為Popup基本上能實(shí)現(xiàn)這個(gè)情況,怎奈有個(gè)線框怎么也弄不掉。FlatAppearance.BorderSize設(shè)置為0不起作用,只對(duì)Flat有用,所以用代碼在Flat和Popup兩種風(fēng)格之間切換。
'在鼠標(biāo)進(jìn)入時(shí)設(shè)置為浮雕風(fēng)格
Private Sub Button1_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.MouseEnter
Button1.FlatStyle = FlatStyle.Popup
End Sub
'離開時(shí)設(shè)置為平面風(fēng)格,這樣像標(biāo)簽一樣只剩下文字,當(dāng)然要FlatAppearance.BorderSize設(shè)置為0
Private Sub Button1_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.MouseLeave
Button1.FlatStyle = FlatStyle.Flat
End Sub
'另外把UseVisualStyleBackColor 設(shè)置為 False也會(huì)好看一點(diǎn)。
Public Sub GenerateDynamiceButton()
'建立 坐標(biāo)位置的變數(shù), 方便一會(huì)兒安排 自動(dòng)生產(chǎn)的button 的位置
Dim y As Integer = 15
Dim x As Integer = 0
' 用for loop 來(lái)建立 這些button 做 18只button
For ButtonIndex As Integer = 0 To 17
' 建造新的 button
Dim MyButton As New Button
'設(shè)定這新的button 的闊度
MyButton.Width = 80
'設(shè)定這新的button 的高度
MyButton.Height = 20
'我們暫定每行有4個(gè)BUTTON, 當(dāng)每行有多個(gè)4個(gè)BUTTON 時(shí)重設(shè)行距, 令到下一行的和這一行的距離有10 個(gè)PIXEL
' 和重設(shè)x 坐標(biāo)` = 0, 令到位置由頭開始
If ButtonIndex Mod 4 = 0 Then
'設(shè)定 TOP 的 坐標(biāo)位置令他可以和上一排的有10個(gè)PIXEL 的距離
y += MyButton.Height + 10
x = 0
End If
'設(shè)定文字 和 位置
' Set the text and set its top and left based on its dimensions and count
MyButton.Text = "My Button" ButtonIndex
'設(shè)定 TOP 的 坐標(biāo)位置
MyButton.Top = y
'下面的CODE 可以令到這個(gè)BUTTON 和另一個(gè)BUTTON 有5個(gè)PIXEL 的距離
MyButton.Left = 26 + (x * (MyButton.Width + 5))
x += 1
'設(shè)定 BUTTON CLICK EVENT
AddHandler MyButton.Click, AddressOf MyButton_Click
'把button 加到 form 中
Me.Controls.Add(MyButton)
Next
End Sub
'處理 button click event
Private Sub MyButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim btn As Button = sender
'pop up 一個(gè)自己button 的字的message
MsgBox(btn.Text)
制作一個(gè)按鈕:
Dim my_Button As New Button
my_Button.SetBounds(Me.Width - 75, 0, 75, 23)
Me.Controls.Add(my_Button)
在軟件運(yùn)行前是看不到這個(gè)按鈕,運(yùn)行后可見,運(yùn)行后想更改按鈕位置,簡(jiǎn)單的方法啟動(dòng)一個(gè)事件,如textbox輸入數(shù)值后通過(guò)Button的點(diǎn)擊事件修改my_Button的頂點(diǎn)位置,還有的方法就是拖動(dòng),拖動(dòng)應(yīng)該是高級(jí)編程部分而且?guī)资写a,沒(méi)有人愿意寫
基本思路是在按鈕的 MouseMove 事件中檢測(cè)鼠標(biāo)左鍵的狀態(tài),如果是按下就跟著移動(dòng)按鈕的位置。