我正在使用自定义选项卡控件的代码,我在网上找到并根据自己的需要进行了修改。
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。
如果我用
包围OnPaintif(!this.DesignMode){}
错误已解决,但我在设计器中丢失了我的制表符控件。
答案 0 :(得分:2)
不要这样做:
this.TabPages[index].BackColor = Colors.CUSTOM_BLACK_2;
在油漆事件中。 paint事件仅用于绘制,而不是设置属性。