制表符控件,垂直对齐的制表符,垂直对齐的文字

时间:2010-06-29 21:21:05

标签: c# winforms visual-studio-2008

我想使用标签控件并在左侧显示标签,而不是在顶部。我已将对齐设置为左侧,并在那里显示选项卡。但是,如何让文本垂直显示在选项卡上?我查看了msdn,它给出了左对齐标签控件的示例,但标签标签仍然是水平显示!

另一方面,是否有人知道如何使用带有左对齐标签的标签控件和默认布局,以便它看起来更好?

请不要使用第三方应用,除非它们是免费的,是的,我已经查看了代码项目。

谢谢,R。

2 个答案:

答案 0 :(得分:3)

本机Windows选项卡控件的视觉样式渲染器中存在一个古老的错误。它只支持顶部的选项卡,工作的微软程序员在完成工作之前被公共汽车运行,我想。

你唯一能做的就是有选择地关闭控件的视觉样式。在项目中添加一个新类并粘贴下面显示的代码。编译。将新控件从工具箱顶部拖放到表单上,替换原始控件。

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;

public class FixedTabControl : TabControl {
    [DllImportAttribute("uxtheme.dll")]
    private static extern int SetWindowTheme(IntPtr hWnd, string appname, string idlist);

    protected override void OnHandleCreated(EventArgs e) {
        SetWindowTheme(this.Handle, "", "");
        base.OnHandleCreated(e);
    }
}

答案 1 :(得分:2)

如果您创建自己的DrawItem事件,则可以手动编写选项卡标题。您可以使用此过程:

1)设置TabControl的以下属性:

 Property  |  Value
 ----------|----------------
 Alignment |  Right (or left, depending on what you want)
 SizeMode  |  Fixed
 DrawMode  |  OwnerDrawFixed

2)将ItemSize.Width属性设置为25,将ItemSize.Height属性设置为100.根据需要调整这些值,但请记住,宽度是高度,反之亦然。

3)为DrawItem事件添加事件处理程序并添加以下代码:

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. Because we CAN.
  Font _TabFont = new Font("Arial", 10, 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));
}

4)利润!

(原始来源:http://en.csharp-online.net/TabControl