设计器中的自定义控件未处理的异常

时间:2015-04-17 16:54:07

标签: c# winforms visual-studio

我正在使用自定义选项卡控件的代码,我在网上找到并根据自己的需要进行了修改。

protected override void OnPaint(PaintEventArgs e) {
    this.PaintTransparentBackground(e.Graphics, this.ClientRectangle);
    this.PaintAllTabs(e);

    if (this.TabCount > 0 && ShowUnderline)
        e.Graphics.DrawLine(new Pen(Colors.TAB_SELECTED, 1), UnderlineStartOffset, 23, this.ClientRectangle.Width - UnderlineEndOffset, 23);
}

protected void PaintAllTabs(PaintEventArgs e) {
    if (this.TabCount > 0)
    {
        CursorSet = false;

        for (int index = this.TabCount - 1; index > -1; index--)
        {
            this.PaintTab(e, index);
            this.PaintTabText(e, index);
            this.TabPages[index].BackColor = Colors.CUSTOM_BLACK_2;
        }
    }
}

我还在设计器中添加了一些可编辑的属性(不确定这是否意味着要完成):

    [Browsable(true)]
    [Category("Customizations")]
    [DisplayName("Tab X Offset")]
    public int XOffset { get; set; }

    [Browsable(true)]
    [Category("Customizations")]
    [DisplayName("Tab Y Offset")]
    public int YOffset { get; set; }

    [Browsable(true)]
    [Category("Customizations")]
    [DisplayName("Tab Width Offset")]
    public int WOffset { get; set; }

    [Browsable(true)]
    [Category("Customizations")]
    [DisplayName("Show Tab Underline")]
    public bool ShowUnderline { get; set; }

    [Browsable(true)]
    [Category("Customizations")]
    [DisplayName("Underline Start Offset")]
    public int UnderlineStartOffset { get; set; }

    [Browsable(true)]
    [Category("Customizations")]
    [DisplayName("Underline End Offset")]
    public int UnderlineEndOffset { get; set; }

    [Browsable(true)]
    [Category("Customizations")]
    [DisplayName("Enable Tab Closing")]
    public bool EnableTabClosing { get; set; }

结果是它在设计器和运行时看起来很棒,因为在运行时不会选择Designer。如果是,我收到以下错误:

  

控件App.Custom_Controls.CustomTabControl在设计器中抛出了未处理的异常,并且已被禁用。

     

例外:   在构建或调试时,无法在设计器中修改文件.. \ View_Main.cs。

如果我用

包围OnPaint

if(!this.DesignMode){}

错误已解决,但我在设计器中丢失了我的制表符控件。

1 个答案:

答案 0 :(得分:2)

不要这样做:

this.TabPages[index].BackColor = Colors.CUSTOM_BLACK_2;

在油漆事件中。 paint事件仅用于绘制,而不是设置属性。