窗体或控件的两种拖动方式

第一种

音量调节的示例


#region 音量控制
private Point mouse_offset;
private void pictureBox7_MouseDown(object sender, MouseEventArgs e)
{
mouse_offset = new Point(-e.X, -e.Y);//
}

private void pictureBox7_MouseMove(object sender, MouseEventArgs e)
{
((Control)sender).Cursor = Cursors.Arrow;//设置拖动时鼠标箭头
if (e.Button == MouseButtons.Left)
{
Point mousePos = Control.MousePosition;
mousePos.Offset(mouse_offset.X, mouse_offset.Y);//设置偏移
mousePos.Y = PointToScreen(pictureBox7.Location).Y;
Point mouse_New = ((Control)sender).Parent.PointToClient(mousePos);
if (mouse_New.X < panel1.Location.X )
{
mouse_New.X = panel1.Location.X;
}
if (mouse_New.X > panel1.Width + panel1.Location.X)
{
mouse_New.X = panel1.Width+ panel1.Location.X ;
}
((Control)sender).Location = mouse_New;

panel2.Width = mouse_New.X-panel1.Location.X;
}
}
#endregion

第二种

命名空间   using System.Runtime.InteropServices;

#region 窗体拖动
       
[DllImport("user32.dll")]
        public
static extern bool ReleaseCapture();
       
[DllImport("user32.dll")]
        public
static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int
lParam);
        ///
<summary>
        ///
pa_top事件
        ///
</summary>
        ///
<param name="sender"></param>
       
/// <param name="e"></param>
       
private void pa_top_MouseDown(object sender, MouseEventArgs e)
       
{
           
ReleaseCapture();
           
SendMessage(this.Handle, 0x0112, 0xF012, 0);
       
}
       
#endregion

两种方式 都可以实现窗体和控件的拖动

第二种方式更适合窗体拖动

窗体或控件的两种拖动方式,布布扣,bubuko.com

时间: 2024-12-22 08:45:02

窗体或控件的两种拖动方式的相关文章

时分秒(HHHH:mm:ss)控件的2种实现方式

方式一.基于DEV TextEdit控件实现时分秒控件 public virtual void textEdit1_FormatEditValue(object sender, DevExpress.XtraEditors.Controls.ConvertEditValueEventArgs e) { TextEdit objectControl = sender as TextEdit; int hour = 0; int minute = 0; int seconds = 0; if (e.

使用两个 Windows 窗体 DataGridView 控件创建一个主/从窗体

使用 DataGridView 控件的一种最常见方案是"主/详细信息"窗体,这样的窗体可显示两个数据库表之间的父/子关系.如果选择主表中的行,将导致以相应的子数据来更新详细信息表. 主/详细信息窗体很容易实现,这需要使用 DataGridView 控件和 BindingSource 组件之间的交互.在本演练中,将使用两个 DataGridView 控件和两个 BindingSource 组件来生成窗体.窗体将显示 Northwind SQL Server 示例数据库中的两个相关表:Cu

实现虚拟模式的动态数据加载Windows窗体DataGridView控件 .net 4.5 (一)

实现虚拟模式的即时数据加载Windows窗体DataGridView控件 .net 4.5 原文地址 :http://msdn.microsoft.com/en-us/library/ms171624.aspx  译 Q:77811970 实现虚拟模式的原因之一 DataGridView控制只检索数据,因为它是必要的. 这就是所谓的 即时数据加载 . 如果你正在与一个非常大的表在一个远程数据库,例如,您可能希望避免启动延迟,只检索所需的数据显示和检索额外的数据只有当用户新行滚动到视图. 如果客户

1.C#窗体和控件

1. partial partial是“部分的”意思.在c#中,为了方便的对代码管理和编辑,可以用pritial关键字将同一个类的代码分开放在多个文件中.每个文件都是类的一部分代码,也叫做分布类,会被编译器当作一个类处理 1 public partial class Login : Form 2 { 3 //代码块 4 } 5 6 7 partial class Login 8 { 9 //代码块 10 } 11 12 //两个文件会在编译时进行合并 2.form form 是 .NET Fra

C# 委托实例(跨窗体操作控件)

在C#里面却是可以不用自定义消息这么复杂的方法来实现跨窗体调用控件,C#有更好的办法就是委托. 效果描述:有两个窗体,FORM1(一个名为“打开form2”的button控件)和FORM2(一个名为“改变form1颜色“的button控件).启动时,FORM1中点击button控件“打开form2””使FORM2显示出来.点击FORM2中的“改变form1颜色”后,Form1中颜色改变. 一.在Form2里面:       首先声明一个委托和委托实例Form2类外 public delegate

[WinForm] 使用反射将业务对象绑定到窗体或控件容器

在WebForm中,可以使用反射将业务对象绑定到 ASP.NET 窗体控件.最近做Winform项目,也参考WebForm中的代码实现同样的功能.     Winform没有提供类似WebForm中的FindControl方法,我于是用遍历控件的方式,写了一个类似WebForm中的这个方法,考虑到Winform中的很多控件放在Label.TabControl中,方法采用了递归的方式.     Winform和Winform的控件也有些区别,如在Winform中,DateTimePicker取值是

无边框窗体 timer控件

一.无边框窗体1.控制按钮如何制作 MouseEnter-鼠标移入的时候发生的事件 pictureBox1.BackgroundImage = Image.FromFile(Application.StartupPath + "\\..\\..\\images\\btn_close_highlight.png"); MouseLeave-鼠标移出的时候发生的事件 pictureBox1.BackgroundImage = Image.FromFile(Application.Start

Winform跨窗体操作控件(使用委托)

Winform跨窗体操作控件是winform开发中很常见的形式,最常见且简单有效的方式便是使用委托的方式来进行操作,下面我将通过一个小实例来说明如何使用委托跨窗体实现控件操作. 实例介绍:两个窗体,Form1按钮打开Form2,然后在Form2的TextBox输入值在Form1的TextBox中显示出来. 一.项目结构 Form1窗体设计: Form2窗体设计: 二.代码实现 在Form2的代码中声明一个委托(写在Form2类外)-> public delegate void ChangeFor

C# 委托实例(跨窗体操作控件)

原文地址 http://blog.csdn.net/bdstjk/article/details/7004035 FORM1(一个名为“打开form2”的button控件) FORM2(一个名为“改变form1颜色“的button控件) 启动时,FORM1中点击button控件“打开form2””使FORM2显示出来. 点击FORM2中的“改变form1颜色”后,Form1中颜色改变. 完整代码 1 using System; 2 using System.Collections.Generic