如何为MouseDown事件c#重现一个友好的循环



我在尝试设置基数时遇到问题。OnMouseDown(e(在MouseDown事件或另一个事件上,由于System.StackOverflowException: 'An exception of type 'System.StackOverflowException' was thrown.'的原因,它崩溃了,在异常详细信息中,我得到了[上面的2帧已经重复了6289次],我想得到其中的一部分(仅用于单击绘制的按钮(Foreach循环来创建100个按钮,同时绘制所有按钮以防止闪烁,但我不知道如何解决这个问题。

private void Dashboard_MouseDown(object sender, MouseEventArgs e)
{
for (int y = 0; y < alts; ++y)
{
for (int x = 0; x < 1; ++x)
{
if (new Rectangle(735, alts_Y + 5, 45, 15).Contains(e.Location))
{
this.Invalidate();
}
alts_Y += 72;
}
}
base.OnMouseDown(e);
}

我猜您在这里(通过调用OnMouseDown()(触发事件是在扰乱事件处理程序(您的方法Dashboard_MouseDown()(。

OnMouseDown()触发事件处理程序Dashboard_MouseDown()。调用OnMouseDown()执行Dashboard_MouseDown()。这会导致一个无限循环,并导致StackOverflowException。

在您链接的示例中,受保护的OnMouseDown()方法被覆盖,并且需要调用base.OnMouseDown()来触发已注册的事件。

如果覆盖基类,则需要覆盖受保护的OnMouseDown()。如果您想注册活动,请使用Dashboard_MouseDown(),但不要调用base.OnMouseDown()

相关内容

最新更新