C# 如何制作winform按钮;“做点什么”;只要我按下按钮?
我试了一整天,找到了各种各样的想法。。。没有真正的帮助。 当我按下一个按钮,比如“JOG”,它会连续移动数控机床的轴,只要按下按钮,然后松开,它就会停止 为了测试这一点,我使用了一个“Picture/LED”,当我按住它时,它应该是打开的。。。当我释放时,它应该关闭 按下按钮应=仅在按下时,执行操作。 释放同一按钮=停止你现在正在做的事情C# 如何制作winform按钮;“做点什么”;只要我按下按钮?,c#,visual-studio,button,C#,Visual Studio,Button,我试了一整天,找到了各种各样的想法。。。没有真正的帮助。 当我按下一个按钮,比如“JOG”,它会连续移动数控机床的轴,只要按下按钮,然后松开,它就会停止 为了测试这一点,我使用了一个“Picture/LED”,当我按住它时,它应该是打开的。。。当我释放时,它应该关闭 按下按钮应=仅在按下时,执行操作。 释放同一按钮=停止你现在正在做的事情 我相信你们这些先进的人,这可能是101。。。但对我来说。。。它正在吃我的午餐。。。帮助?一般来说,请查看鼠标上下移动事件。我会让它在鼠标按下时异步调用某些函数
我相信你们这些先进的人,这可能是101。。。但对我来说。。。它正在吃我的午餐。。。帮助?一般来说,请查看鼠标上下移动事件。我会让它在鼠标按下时异步调用某些函数(而不是在UI线程上)。当鼠标向上移动事件触发时停止。线程有一些很好的模型。试着在那里搜索一下 您希望启动和停止一个线程,该线程的过程正在循环执行您的操作。您可以使用和事件。当点击
MouseDown
事件时,调用循环并执行操作的方法。一旦点击MouseUp
,停止循环
private bool _run = false;
public void button_MouseDown(object sender, EventArgs e)
{
_run = true;
MyAction();
}
public void button_MouseUp(object sender, EventArgs e)
{
_run = false;
}
public void MyAction()
{
while(_run)
{
//You actions
}
}
请注意,上面的示例将占用UI线程。您应该使用
BackgroundWorker
或类似的工具在另一个线程上运行它。我会创建自己的子类,如下所示:
public class RepeatButton : Button
{
readonly Timer timer = new Timer();
public event EventHandler Depressed;
public virtual TimeSpan Interval
{
get { return TimeSpan.FromMilliseconds(timer.Interval); }
set { timer.Interval = (int)value.TotalMilliseconds; }
}
public RepeatButton()
{
timer.Interval = 100;
timer.Tick += delegate { OnDepressed(); };
}
protected override void OnMouseUp(MouseEventArgs e)
{
base.OnMouseUp(e);
timer.Stop();
}
protected override void OnMouseDown(MouseEventArgs e)
{
base.OnMouseDown(e);
timer.Start();
}
protected virtual void OnDepressed()
{
var handler = this.Depressed;
if (handler != null)
handler(this, EventArgs.Empty);
}
}
这允许您的代码是异步的,但仍然会在UI线程上调用
按下的事件。谢谢大家,这是我所能做到的最简单的。
按钮和鼠标控制混合在一起,需要鼠标操作。。。它被添加到按钮属性中,将代码添加到设计器中
private void button2_MouseDown(object sender, MouseEventArgs e)
{
led18.Show();
}
private void button2_MouseUp(object sender, MouseEventArgs e)
{
led18.Hide();
}
//below get automatically put into the design file...
this.button1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.button1_MouseDown);
this.button1.MouseUp += new System.Windows.Forms.MouseEventHandler(this.button1_MouseUp);
考虑一下空格键也可以上下触发按钮
this.button1.MouseDown+=new System.Windows.Forms.MouseEventHandler(this.button1\u MouseDown);
this.button1.MouseUp+=新系统.Windows.Forms.MouseEventHandler(this.button1\u MouseUp);
this.button1.KeyDown+=新的System.Windows.Forms.KeyEventHandler(this.button1\u KeyDown);
this.button1.KeyUp+=新的System.Windows.Forms.KeyEventHandler(this.button1\u KeyUp);
私有无效按钮1\u鼠标向下(对象发送方,鼠标目标e)
{
led18.Show();
}
专用无效按钮1\u鼠标(对象发送器,鼠标目标e)
{
led18.Hide();
}
私有void按钮1\u KeyDown(对象发送方,KeyEventArgs e)
{
if(e.KeyCode==Keys.Space&&e.Alt==false&&e.Control==false&&e.Shift==false)
{
led18.Show();
}
}
私有void按钮1\u KeyUp(对象发送方,KeyEventArgs e)
{
led18.Hide();
}
这是windows窗体上的一个按钮?类似这样的按钮?发布您当前的代码。您可能希望检查按钮\u MouseDown()事件及其同级MouseUp():是的,它位于windows窗体上。如果不执行线程,这可能会锁定您的UI。在这件事上要小心。否则是很好的解决方案。谢谢,。。。我将在需要此功能的按钮上尝试此鼠标代码。我会汇报我能做的事情。