如何阻止我的重写控件.OnPaint在winforms设计器中执行?

时间:2016-05-29 01:31:25

标签: c# winforms

虽然此问题的回答完全重复,但我遇到的问题(因此问题本身)并不完全重复。在搜索可能的答案时,我不认为引用的问题可能包含我的问题的答案。

我通过覆盖OnPaint控件来绘制面板上的波形。一切都运行良好。但是,当我在设计器中时,如果我将光标移到面板上,会引发IndexOutOfRange异常,并且面板显示错误:

VS design time error 当然错误是正确的,因为当程序没有运行时,所有索引都超出范围。

这种行为只是令人讨厌,但我想了解如何控制它。我猜测有一些简单的方法可以告诉面板何时在设计环境中显示,或者告诉它何时在执行的应用程序环境中显示。如果是这样,我可以为重写的OnPaint添加逻辑来处理这种情况。

我已经搜索了Stack Exchange并广泛搜索并查看了我的所有参考书,但我没有找到任何关于如何区分设计时和运行时环境的解释。也许我还没有找到正确的描述性词汇?

1 个答案:

答案 0 :(得分:0)

正如我所担心的,这是一个术语问题:搜索设计时没有产生任何命中,但设计模式却没有。正如第一条评论中所建议的那样,对我来说简单的解决方案就是这样做:

protected override void OnPaint(PaintEventArgs e) 
{
    base.OnPaint(e);
    if (!this.DesignMode)
    {
        // perform all my waveform rendering 
    }
}