winform如何实现点动功能,即鼠标长按按钮,按钮执行操作(例如bool置1);松开按钮,操作停止(bool置0)。
引用 皆我百晓生 小程序回复内容作答:
要实现鼠标长按按钮的功能,可以使用以下步骤:
在WinForm窗体中,将一个按钮(Button)控件添加到窗体上,并设置按钮的名称和位置。
在窗体的构造函数或者Load事件中,为按钮的MouseDown和MouseUp事件绑定对应的事件处理方法。
在按钮的MouseDown事件处理方法中,设置一个定时器(Timer),并启动定时器。定时器的间隔设置为需要触发操作的时间间隔。
在按钮的MouseUp事件处理方法中,停止定时器。
在定时器的Tick事件处理方法中,执行需要的操作,例如将bool变量置为1。
以下是一个示例代码:
public partial class Form1 : Form
{
private Timer timer;
private bool isButtonPressed;
public Form1()
{
InitializeComponent();
isButtonPressed = false;
button1.MouseDown += Button1_MouseDown;
button1.MouseUp += Button1_MouseUp;
timer = new Timer();
timer.Interval = 100; // 设置定时器的间隔为100毫秒
timer.Tick += Timer_Tick;
}
private void Button1_MouseDown(object sender, MouseEventArgs e)
{
isButtonPressed = true;
timer.Start();
}
private void Button1_MouseUp(object sender, MouseEventArgs e)
{
isButtonPressed = false;
timer.Stop();
}
private void Timer_Tick(object sender, EventArgs e)
{
// 执行操作,例如将bool变量置为1
}
}
在上述示例代码中,当鼠标按下按钮时,会启动定时器,并在定时器的Tick事件中执行需要的操作。当鼠标松开按钮时,会停止定时器。通过判断isButtonPressed变量的值,可以在需要的操作中进行条件判断。
用checkbox,checkbox的外观样式有一种就是按钮样式
也就是点一下按下去,再点一下才抬起来。
mousedown,mouseup事件。
暂时先回答这么多把。如果你不清楚或者想要更好的。我等你回复了,再决定后面的回答。
以前写了一个方法,就是长按控件时触发的,给你试试
我是静态扩展方法,你把里面的this 去掉就是普通静态方法了
/// <summary>
/// 注册 MouseDown、MouseUp 事件
/// 在鼠标按下时异步执行委托
/// </summary>
/// <param name="Control">控件</param>
/// <param name="Time">循环时线程睡眠时间</param>
/// <param name="TimeDecrement">每次循环睡眠时间减少值</param>
/// <param name="Action">循环时执行的事件</param>
/// <param name="Func">在按下的过程中,指示是否继续循环</param>
public static void MouseDownLoop(this Control Control, int Time, int TimeDecrement, Action Action, Func<bool> Func = null)
{
if (Action == null)
{
return;
}
bool IsStart = true;
Func = Func ?? (() => true);
System.Threading.Tasks.Task task = null;
Control.MouseDown += (sender, e) =>
{
if (task != null)
{
return;
}
IsStart = true;
task = System.Threading.Tasks.Task.Run(() =>
{
System.Threading.Thread.Sleep(1500);
while (IsStart && Func())
{
Action();
System.Threading.Thread.Sleep(Time);
if (Time > 50)
{
Time -= TimeDecrement;
if (Time < 50)
{
Time = 50;
}
}
}
task = null;
});
};
Control.MouseUp += (sender, e) =>
{
IsStart = false;
if (task != null)
{
return;
}
};
}