很久沒(méi)有上這里了,今天看到了這個(gè)問(wèn)題,嘗試做了一個(gè);
成都創(chuàng)新互聯(lián)是一家專(zhuān)注于成都做網(wǎng)站、網(wǎng)站制作與策劃設(shè)計(jì),宜川網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專(zhuān)注于網(wǎng)站建設(shè)10余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專(zhuān)業(yè)建站公司;建站業(yè)務(wù)涵蓋:宜川等地區(qū)。宜川做網(wǎng)站價(jià)格咨詢(xún):18982081108
本例以源文本框TextBox1全部文字作為拖放文字為例,實(shí)現(xiàn)拖放
1、向一個(gè)窗體中添加兩個(gè)文本框,分別名為T(mén)extBox1,TextBox2。注意:把TextBox2控件的AllowDrop屬性設(shè)置成True,這點(diǎn)不要遺漏。
2、完整的代碼如下:
Public Class Form1
Private MouseIsDown As Boolean = False
Private Sub TextBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseDown
'設(shè)置一個(gè)標(biāo)志以顯示鼠標(biāo)已按下。
MouseIsDown = True
End Sub
Private Sub TextBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseMove
If MouseIsDown Then
'開(kāi)始拖動(dòng)(將TextBox1的文本內(nèi)容作為拖放內(nèi)容)。
TextBox1.DoDragDrop(TextBox1.Text, DragDropEffects.Copy)
End If
MouseIsDown = False
End Sub
Private Sub TextBox2_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox2.DragEnter
'檢查正在被拖放的數(shù)據(jù)的格式。
If (e.Data.GetDataPresent(DataFormats.Text)) Then
'顯示復(fù)制光標(biāo)(表示是拖放行為)。
e.Effect = DragDropEffects.Copy
Else
'顯示不放置光標(biāo)(表示不是拖放行為)。
e.Effect = DragDropEffects.None
End If
End Sub
Private Sub TextBox2_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox2.DragDrop
'粘貼文本(將拖放內(nèi)容作為T(mén)extBox2的文本內(nèi)容)。
TextBox2.Text = e.Data.GetData(DataFormats.Text)
End Sub
End Class
在控件的MouseDown事件中,記錄控件的當(dāng)前位置和鼠標(biāo)坐標(biāo),并設(shè)置一個(gè)標(biāo)志變量表示進(jìn)入拖動(dòng)狀態(tài);在MouseMove事件中,判斷如果當(dāng)前是拖動(dòng)狀態(tài),則根據(jù)鼠標(biāo)的當(dāng)前坐標(biāo)和MouseDown時(shí)的坐標(biāo)計(jì)算出移動(dòng)量,更改控件位置;在MouseUp事件中清除標(biāo)志變量。
控件是可以顯示在里面的,你只要加個(gè)label,把label的屬性設(shè)為visualble=fause就行。設(shè)置鼠標(biāo)經(jīng)過(guò)頭像的mouseHover和mouseLeave事件,當(dāng)mouseHover時(shí)label的屬性visualble=true,當(dāng)mouseLeave時(shí)label的屬性visualble=fause即可。窗體的鼠標(biāo)事件可以設(shè)置控件的cursor屬性,里面可以選擇許多種鼠標(biāo)圖形。 只要是正常的Form都可以改變窗體大小,但是無(wú)邊框的窗體只能用函數(shù)改變或者設(shè)置屬性,在debug后是不能改變的。拖動(dòng)窗體需要在窗體的load時(shí)間里面寫(xiě)入當(dāng)鼠標(biāo)單擊不放時(shí)的事件即可,不難。
VB.NET沒(méi)寫(xiě)過(guò),C#的倒是經(jīng)常用,你看看能不能有所啟發(fā)
void?Creact()??//創(chuàng)建4*5格=20個(gè)按鈕的鍵盤(pán)
{
const?int?width=Convert.ToInt32(this.panel1.Width/20);
const?int?height=Convert.ToInt32(this.panel1.Width/25);
for(int?i=1;i=5;i++)
{
for(int?j=1;j=4;j++)
{
Button?b=new?Button();
b.Name="btn"+i.ToString()+j.ToString();
b.Left=40*j;
b.Top=30*i;
b.....???//位置設(shè)置
b.Text=CortoEnglist(i+j+65);//轉(zhuǎn)換字母鍵函數(shù)略寫(xiě)
...
//加入鼠標(biāo)事件
b.MouseDown+=new?MouseHandler(btn_mousedown);
b.MouseUp+=new?MouseHandler(btn_mouseup);
b.MouseLeave+=new?MouseHandler(btn_mouseleave);
b.MouseMove+=new?MouseHandler(btn_mousemove);
this.panel1.Controls.Add(b)
}
}
}
public?int?Bealoon?br=false;??//判斷是否按下全局變量
void?btn_mousedown(object?sender,MouseEventArgs?e)??//鼠標(biāo)按下開(kāi)始計(jì)算
{
br=true;
}
void?btn_mouseleave(object?sender,MouseEventArgs?e)?//鼠標(biāo)移開(kāi)就結(jié)束
{
br=false;
}
void?btn_mouseup(object?sender,MouseEventArgs?e)?//鼠標(biāo)彈起也會(huì)結(jié)束
{
br=false;??//跟移開(kāi)不重復(fù),你按下不松手去按另一個(gè)發(fā)現(xiàn)他就不會(huì)彈起,所以要加這個(gè)事件
}
void?btn_mousemove(object?sender,MouseEventArgs?e)?//按下?tīng)顟B(tài)拖動(dòng)就有效
{
if(br==true)
{
((Button)sender).Left+=e.X;
((Button)sender).Top+=e.Y;
}
}這樣我I就給一組按鈕加了拖動(dòng)狀態(tài)
你做好拖動(dòng)了嗎?會(huì)拖動(dòng)就好辦,控制邊界就好了,設(shè)定label能移動(dòng)到的最大坐標(biāo)和最小坐標(biāo)。
我不太明白你要做什么,如果沒(méi)有特殊要求,重寫(xiě)trackbar的部分功能即可
Dim i As Integer
For i = 0 To Me.Width - Button1.Width 'me為容器,典型的是form1
Button1.Left += 1
Windows.Forms.Application.DoEvents()
Next
原理:不斷地變化button1的X軸,使其向右移,同樣,只要控制好其x,y軸,就可以變化button的變化
如果是做小游戲,建議弄成類(lèi)吧,把其中的左(右)移或?qū)瞧渌苿?dòng)弄成其接口,以便操作。
由于涉及內(nèi)容太多,不再詳述。原理都一樣
文章名稱(chēng):vb.net拖動(dòng)控件 c# 拖動(dòng)控件
新聞來(lái)源:http://jinyejixie.com/article26/dodoecg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開(kāi)發(fā)、靜態(tài)網(wǎng)站、網(wǎng)站排名、ChatGPT、網(wǎng)頁(yè)設(shè)計(jì)公司、網(wǎng)站設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)