在设计时使用水平文本的垂直制表符控件

时间:2014-06-09 17:39:43

标签: c# vb.net winforms tabcontrol

在应用这种方法后,一个明显的遗漏似乎是:

Microsoft也推荐使用:

设计时标签上没有文字,因此进一步的开发和支持将成为一场噩梦。

enter image description here

有没有办法让标签文字也能在设计时显示?

3 个答案:

答案 0 :(得分:4)

只需创建自己的控件,这样自定义绘图也可以在设计时使用。在项目中添加一个新类并粘贴下面显示的代码。编译。将新控件从工具箱顶部拖放到表单上。我调整了一下,使其不那么花哨。

using System;
using System.Drawing;
using System.Windows.Forms;

class VerticalTabControl : TabControl {
    public VerticalTabControl() {
        this.Alignment = TabAlignment.Right;
        this.DrawMode = TabDrawMode.OwnerDrawFixed;
        this.SizeMode = TabSizeMode.Fixed;
        this.ItemSize = new Size(this.Font.Height * 3 / 2, 75);
    }
    public override Font Font {
        get { return base.Font;  }
        set {
            base.Font = value;
            this.ItemSize = new Size(value.Height * 3 / 2, base.ItemSize.Height);
        }
    }
    protected override void OnDrawItem(DrawItemEventArgs e) {
        using (var _textBrush = new SolidBrush(this.ForeColor)) {
            TabPage _tabPage = this.TabPages[e.Index];
            Rectangle _tabBounds = this.GetTabRect(e.Index);

            if (e.State != DrawItemState.Selected) e.DrawBackground();
            else {
                using (var brush = new System.Drawing.Drawing2D.LinearGradientBrush(e.Bounds, Color.White, Color.LightGray, 90f)) {
                    e.Graphics.FillRectangle(brush, e.Bounds);
                }
            }

            StringFormat _stringFlags = new StringFormat();
            _stringFlags.Alignment = StringAlignment.Center;
            _stringFlags.LineAlignment = StringAlignment.Center;
            e.Graphics.DrawString(_tabPage.Text, this.Font, _textBrush, _tabBounds, new StringFormat(_stringFlags));
        }
    }
}

答案 1 :(得分:3)

您需要继承TabControl并覆盖OnDrawItem。这是一个例子:

Public Class UITabControl
    Inherits TabControl

    Protected Overrides Sub OnDrawItem(e As DrawItemEventArgs)
        Using brush As New SolidBrush(Me.ForeColor)
            Using format As New StringFormat() With {.LineAlignment = StringAlignment.Center}
                Select Case Me.Alignment
                    Case TabAlignment.Left
                        format.Alignment = StringAlignment.Near
                    Case TabAlignment.Top
                        format.Alignment = StringAlignment.Far
                End Select
                format.FormatFlags = (format.FormatFlags Or StringFormatFlags.NoWrap)
                Dim rect As Rectangle = e.Bounds
                rect.X += 3
                rect.Width -= 6
                e.Graphics.DrawString(Me.TabPages(e.Index).Text, Me.Font, brush, rect, format)
            End Using
        End Using
        MyBase.OnDrawItem(e)
    End Sub

End Class

答案 2 :(得分:0)

由于您链接到我的问题,我认为通知您问题帖子的更新是合适的。

我已经在answer to my question中为编程社区的利益上传了我的控件代码。

这是运行时控件的屏幕截图 Vertical Tabs Control screenshot

它具有完整的设计时支持,自动调整标签大小(最大128px宽)和标签图标。

可以从here下载代码。