如何制作类似触摸屏的主窗体 C#
how to make touchscreen-like mainform C#
我想让我的主窗体像智能手机触摸屏一样可拖动。
所以我在其中放置了一个 bunifugradientpanel 并将其停靠在 mainform 中。还放了一个 bunifudragcontrol 并设置了 targetcontrol 属性 = 'bunifugradientpanel'
和 vertical 属性 to 'false' also fixed 属性 to 'false'.但是,每当我在 rumtime 中将面板向右拖动时,主窗体的部分就会显示出来,也就是图片中的白色部分。
屏幕的白色部分是主窗体。我想要的是停止拖动 activity 如果主窗体上的 bunifugradientpanel 位置 = (x=0,y=0) 所以主窗体的部分不会出现。感谢你们的帮助。
BunifuGradientPanel
是第三方控件,这就是为什么它会出现绘图和闪烁问题,我的建议是您使用常见的 Panel
System.Windows.Forms.Panel
也就是说,我为您创建了这段代码,使控件在按下鼠标按钮时只能从右向左和从左向右拖动:
using System;
using System.Windows.Forms;
namespace JeremyHelp
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.SetStyle(
ControlStyles.AllPaintingInWmPaint |
ControlStyles.UserPaint |
ControlStyles.DoubleBuffer,
true);
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
this.SetDraggable(this.bunifuGradientPanel1, vertical: false);
}
protected override CreateParams CreateParams
{
get
{
CreateParams handleParam = base.CreateParams;
handleParam.ExStyle |= 0x02000000; // WS_EX_COMPOSITED
return handleParam;
}
}
private void SetDraggable(Control target, bool horizontal = true, bool vertical = true)
{
bool IsDraggable = false;
int
X = 0, Y = 0,
A = 0, B = 0;
target.MouseUp += (s, e) =>
{
IsDraggable = false;
X = 0; Y = 0;
A = 0; B = 0;
};
target.MouseDown += (s, e) =>
{
IsDraggable = true;
A = Control.MousePosition.X - target.Left;
B = Control.MousePosition.Y - target.Top;
};
target.MouseMove += (s, e) =>
{
X = Control.MousePosition.X;
Y = Control.MousePosition.Y;
if (IsDraggable)
{
if (horizontal) target.Left = X - A;
if (vertical) target.Top = Y - B;
}
};
}
}
}
我想让我的主窗体像智能手机触摸屏一样可拖动。
所以我在其中放置了一个 bunifugradientpanel 并将其停靠在 mainform 中。还放了一个 bunifudragcontrol 并设置了 targetcontrol 属性 = 'bunifugradientpanel'
和 vertical 属性 to 'false' also fixed 属性 to 'false'.但是,每当我在 rumtime 中将面板向右拖动时,主窗体的部分就会显示出来,也就是图片中的白色部分。
屏幕的白色部分是主窗体。我想要的是停止拖动 activity 如果主窗体上的 bunifugradientpanel 位置 = (x=0,y=0) 所以主窗体的部分不会出现。感谢你们的帮助。
BunifuGradientPanel
是第三方控件,这就是为什么它会出现绘图和闪烁问题,我的建议是您使用常见的 Panel
System.Windows.Forms.Panel
也就是说,我为您创建了这段代码,使控件在按下鼠标按钮时只能从右向左和从左向右拖动:
using System;
using System.Windows.Forms;
namespace JeremyHelp
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.SetStyle(
ControlStyles.AllPaintingInWmPaint |
ControlStyles.UserPaint |
ControlStyles.DoubleBuffer,
true);
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
this.SetDraggable(this.bunifuGradientPanel1, vertical: false);
}
protected override CreateParams CreateParams
{
get
{
CreateParams handleParam = base.CreateParams;
handleParam.ExStyle |= 0x02000000; // WS_EX_COMPOSITED
return handleParam;
}
}
private void SetDraggable(Control target, bool horizontal = true, bool vertical = true)
{
bool IsDraggable = false;
int
X = 0, Y = 0,
A = 0, B = 0;
target.MouseUp += (s, e) =>
{
IsDraggable = false;
X = 0; Y = 0;
A = 0; B = 0;
};
target.MouseDown += (s, e) =>
{
IsDraggable = true;
A = Control.MousePosition.X - target.Left;
B = Control.MousePosition.Y - target.Top;
};
target.MouseMove += (s, e) =>
{
X = Control.MousePosition.X;
Y = Control.MousePosition.Y;
if (IsDraggable)
{
if (horizontal) target.Left = X - A;
if (vertical) target.Top = Y - B;
}
};
}
}
}