带水平文本的C#垂直制表符控件

时间:2015-10-13 04:59:30

标签: c# winforms

我想在标签控件This is what I want中显示一些信息。

我已经使用了我在你身边找到的方法来更改选项卡控件的属性并使用Draw Event但是输出不像我需要的那样。输出就像This is what I am getting .. 我希望文本是水平的。我的VS也是2008年

2 个答案:

答案 0 :(得分:3)

我按照这些instructions in VB将它们转换为C#。为我工作。基本上在制表符控件属性中设置以下内容:

  1. Alignment = Left
  2. SizeMode = Fixed
  3. ItemSize = 30,120:宽度= 30高度= 120
  4. DrawMode = OwnerDrawFixed
  5. 然后你必须像这样处理DrawItem事件:

    private void tabControl1_DrawItem(object sender, DrawItemEventArgs e)
    {
        var g = e.Graphics;
        var text = this.tabControl1.TabPages[e.Index].Text;
        var sizeText = g.MeasureString(text, this.tabControl1.Font);
    
        var x = e.Bounds.Left + 3;
        var y = e.Bounds.Top + (e.Bounds.Height - sizeText.Height) / 2;
    
        g.DrawString(text, this.tabControl1.Font, Brushes.Black, x, y);
    }
    

    结果是:

    enter image description here

答案 1 :(得分:1)

将SizeMode属性设置为Fixed,以便所有选项卡的宽度相同。  将ItemSize属性设置为选项卡的首选固定大小。请记住,ItemSize属性的行为就像选项卡位于顶部一样,尽管它们是左对齐的。因此,为了使选项卡更宽,您必须更改Height属性,并且为了使它们更高,您必须更改Width属性。 [我将ItemSize设置为:25,150]。

将DrawMode属性设置为OwnerDrawFixed。

private void tabControl1_DrawItem(object sender, DrawItemEventArgs e)

{

Graphics g = e.Graphics;

Brush _textBrush;



// Get the item from the collection.

TabPage _tabPage = tabControl1.TabPages[e.Index];



// Get the real bounds for the tab rectangle.

Rectangle _tabBounds = tabControl1.GetTabRect(e.Index);



if (e.State == DrawItemState.Selected)

{



    // Draw a different background color, and don't paint a focus rectangle.

    _textBrush = new SolidBrush(Color.Red);

    g.FillRectangle(Brushes.Gray, e.Bounds);

}

else

{

    _textBrush = new System.Drawing.SolidBrush(e.ForeColor);

    e.DrawBackground();

}



// Use our own font.

Font _tabFont = new Font("Arial", (float)10.0, FontStyle.Bold, GraphicsUnit.Pixel);



// Draw string. Center the text.

StringFormat _stringFlags = new StringFormat();

_stringFlags.Alignment = StringAlignment.Center;

_stringFlags.LineAlignment = StringAlignment.Center;

g.DrawString(_tabPage.Text, _tabFont, _textBrush, _tabBounds, new StringFormat(_stringFlags));

}