如何使用鼠标按下事件增加矩形的大小?
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();
}
答案 0 :(得分:2)
答案 1 :(得分:1)
即使您将手指放在按钮上,当您单击鼠标按钮时,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 建议的timer
可能更好(也更简单)。您可以通过设置定时器间隔来调整增加的“灵敏度”。
假设您使用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();
}