C# 是否总是在鼠标按下事件中增加矩形的大小?
如何在鼠标按下事件中始终增大矩形的大小C# 是否总是在鼠标按下事件中增加矩形的大小?,c#,C#,如何在鼠标按下事件中始终增大矩形的大小 private void btnPlus_MouseDown(object sender, MouseEventArgs e) { rect.Width = rect.Width + 1; rect.Height = (int)(((rect.Width) / 4) * 3); label1.Text = rect.Width.ToString(); label2.Text = rect.Height.ToString()
private void btnPlus_MouseDown(object sender, MouseEventArgs e)
{
rect.Width = rect.Width + 1;
rect.Height = (int)(((rect.Width) / 4) * 3);
label1.Text = rect.Width.ToString();
label2.Text = rect.Height.ToString();
pictureBox1.Invalidate();
}
当您单击鼠标按钮时,
MouseDown
事件仅被调用一次,即使您将手指放在按钮上
如果要在手指按下按钮时继续执行任务,请在MouseDown
事件中创建一个新线程,并在MouseUp
事件中终止它。在线程中,执行while
循环,在其中执行增加:
private Thread _increaseWidthThread;
private Boolean _endThreadFlag;
private void btnPlus_MouseDown(object sender, MouseEventArgs e)
{
_endThreadFlag = false;
increaseWidthThread = new Thread(() => IncreaseWidth);
}
private void btnPlus_MouseDown(object sender, MouseEventArgs e)
{
_endThreadFlag = true;
}
private void IncreaseWidth() {
while (!_endThreadFlag) {
this.Invoke((MethodInvoker) delegate {
rect.Width = rect.Width + 1;
rect.Height = (int)(((rect.Width) / 4) * 3);
label1.Text = rect.Width.ToString();
label2.Text = rect.Height.ToString();
pictureBox1.Invalidate();
});
}
}
我使用一个标志指示线程何时应该停止,并使用一个匿名方法从线程更新GUI
编辑 与使用线程相比,使用
计时器可能更好(更简单),正如Andrey所建议的那样。您可以通过设置计时器间隔来调整增加的“灵敏度”
假设您使用winforms,则如下所示:
private System.Windows.Forms.Timer _timer;
public ClassConstructor () {
_timer = new System.Windows.Forms.Timer();
_timer.Interval = 100; // Set the "sensitivity"
_timer.Elapsed += new ElapsedEventHandler(OnTimer);
}
private void btnPlus_MouseDown(object sender, MouseEventArgs e)
{
timer.Start();
}
private void btnPlus_MouseDown(object sender, MouseEventArgs e)
{
timer.Stop();
}
private void OnTimer(object sender, ElapsedEventArgs e) {
rect.Width = rect.Width + 1;
rect.Height = (int)(((rect.Width) / 4) * 3);
label1.Text = rect.Width.ToString();
label2.Text = rect.Height.ToString();
pictureBox1.Invalidate();
}
当您单击鼠标按钮时,MouseDown
事件仅被调用一次,即使您将手指放在按钮上
如果要在手指按下按钮时继续执行任务,请在MouseDown
事件中创建一个新线程,并在MouseUp
事件中终止它。在线程中,执行while
循环,在其中执行增加:
private Thread _increaseWidthThread;
private Boolean _endThreadFlag;
private void btnPlus_MouseDown(object sender, MouseEventArgs e)
{
_endThreadFlag = false;
increaseWidthThread = new Thread(() => IncreaseWidth);
}
private void btnPlus_MouseDown(object sender, MouseEventArgs e)
{
_endThreadFlag = true;
}
private void IncreaseWidth() {
while (!_endThreadFlag) {
this.Invoke((MethodInvoker) delegate {
rect.Width = rect.Width + 1;
rect.Height = (int)(((rect.Width) / 4) * 3);
label1.Text = rect.Width.ToString();
label2.Text = rect.Height.ToString();
pictureBox1.Invalidate();
});
}
}
我使用一个标志指示线程何时应该停止,并使用一个匿名方法从线程更新GUI
编辑
与使用线程相比,使用计时器可能更好(更简单),正如Andrey所建议的那样。您可以通过设置计时器间隔来调整增加的“灵敏度”
假设您使用winforms,则如下所示:
private System.Windows.Forms.Timer _timer;
public ClassConstructor () {
_timer = new System.Windows.Forms.Timer();
_timer.Interval = 100; // Set the "sensitivity"
_timer.Elapsed += new ElapsedEventHandler(OnTimer);
}
private void btnPlus_MouseDown(object sender, MouseEventArgs e)
{
timer.Start();
}
private void btnPlus_MouseDown(object sender, MouseEventArgs e)
{
timer.Stop();
}
private void OnTimer(object sender, ElapsedEventArgs e) {
rect.Width = rect.Width + 1;
rect.Height = (int)(((rect.Width) / 4) * 3);
label1.Text = rect.Width.ToString();
label2.Text = rect.Height.ToString();
pictureBox1.Invalidate();
}
你的问题是什么?您提供的代码有任何问题吗?是的,它只发生过一次,仅此而已,我想在保留鼠标期间增加。有一个类似的问题,答案是:Winforms的RepeatButton:或wpf您的问题是什么?您提供的代码有任何问题吗?是的,它只发生过一次,仅此而已,我想在保留鼠标期间增加。有一个类似的问题,答案是:Winforms的RepeatButton:或wpf的RepeatButton