我想使用标签控件并在左侧显示标签,而不是在顶部。我已将对齐设置为左侧,并在那里显示选项卡。但是,如何让文本垂直显示在选项卡上?我查看了msdn,它给出了左对齐标签控件的示例,但标签标签仍然是水平显示!
另一方面,是否有人知道如何使用带有左对齐标签的标签控件和默认布局,以便它看起来更好?
请不要使用第三方应用,除非它们是免费的,是的,我已经查看了代码项目。
谢谢,R。
答案 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)利润!