WinForm實(shí)現(xiàn)鼠標(biāo)拖動(dòng)控件跟隨效果
本文實(shí)例為大家分享了WinForm實(shí)現(xiàn)鼠標(biāo)拖動(dòng)控件跟隨效果的具體代碼,供大家參考,具體內(nèi)容如下
1. 運(yùn)行初始窗口如下:

2. 拖動(dòng)后效果如下:

3. 代碼如下:
public partial class Form1 : Form
{
/*
* 理解了下面的幾個(gè)概念,就能完全明白相對坐標(biāo)的變化.
* MouseEventArgs e 為事件鼠標(biāo)參數(shù),因此,e.Location 指示了位于事件源上的光標(biāo)坐標(biāo)
* Cursor.Position 獲取的是相對于用戶屏幕的光標(biāo)坐標(biāo)
* PointToClient() 方法可將屏幕坐標(biāo) Cursor.Position 換算成工作區(qū)的坐標(biāo)
* 因此,換算后的 Cursor.Position 減去 e.Location 得到的始終是事件源的 Location
*/
/// <summary>
/// 鼠標(biāo)按下為true
/// </summary>
private bool Mousedown;
/// <summary>
/// 鼠標(biāo)在事件源的位置
/// </summary>
private int CurX = 0;
private int CurY = 0;
public Form1()
{
InitializeComponent();
}
private void Controls_MouseDown(object sender, MouseEventArgs e)
{
CurX = e.X;
CurY = e.Y;
Mousedown = true;
if (sender is TextBox)
{
((TextBox)sender).Cursor = Cursors.Arrow;
}
}
private void Controls_MouseMove(object sender, MouseEventArgs e)
{
if (Mousedown)
{
// 獲取當(dāng)前屏幕的光標(biāo)坐標(biāo)
Point pTemp = new Point(Cursor.Position.X, Cursor.Position.Y);
// 轉(zhuǎn)換成工作區(qū)坐標(biāo)
pTemp = this.PointToClient(pTemp);
// 定位事件源的 Location
Control control = sender as Control;
control.Location = new Point(pTemp.X - CurX, pTemp.Y - CurY);
}
}
private void Controls_MouseUp(object sender, MouseEventArgs e)
{
Mousedown = false;
if (sender is TextBox)
{
((TextBox)sender).Cursor = Cursors.IBeam;
}
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- C#日期控件datetimepicker保存空值的三種方法
- winform dateTime數(shù)據(jù)類型轉(zhuǎn)換方法
- c# Winform自定義控件-儀表盤功能
- Winform控件Picture實(shí)現(xiàn)圖片拖拽顯示效果
- WinForm IP地址輸入框控件實(shí)現(xiàn)
- winform實(shí)現(xiàn)可拖動(dòng)的自定義Label控件
- 使用重繪項(xiàng)美化WinForm的控件
- C# winform自定義翻頁控件詳解
- C# WinForm實(shí)現(xiàn)窗體上控件自由拖動(dòng)功能示例
- Winform控件SaveFileDialog用于保存文件
- C#中WinForm控件的拖動(dòng)和縮放的實(shí)現(xiàn)代碼
- C# WinForm-Timer控件的使用
相關(guān)文章
在C#中使用適配器Adapter模式和擴(kuò)展方法解決面向?qū)ο笤O(shè)計(jì)問題記錄
在開發(fā)基于MonoGame的游戲框架時(shí),面臨SpriteFont和DynamicSpriteFont兼容問題,SpriteFont在內(nèi)容管道中編譯確定字號(hào),導(dǎo)致不同字號(hào)需加載多個(gè)字體資源,本文給大家介紹在C#中使用適配器Adapter模式和擴(kuò)展方法解決面向?qū)ο笤O(shè)計(jì)問題,感興趣的朋友一起看看吧2024-10-10
c#中DataTable轉(zhuǎn)List的2種方法示例
這篇文章主要給大家介紹了關(guān)于c#中DataTable轉(zhuǎn)List的2種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
Unity實(shí)戰(zhàn)之FlyPin(見縫插針)小游戲的實(shí)現(xiàn)
這篇文章主要介紹了利用Unity制作FlyPin(見縫插針)小游戲的實(shí)現(xiàn)方法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起試一試2022-01-01
C#如何讀寫應(yīng)用程序配置文件App.exe.config,并在界面上顯示
這篇文章主要介紹了C#如何讀寫應(yīng)用程序配置文件App.exe.config,并在界面上顯示問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06

