【发布时间】:2012-08-26 19:56:28
【问题描述】:
我正在使用 TabControl 并且我有 DrawFixed。我只想绘制标签而不是它下面的面板。
如何删除它?
另外我想问一下,我可以更改标签大小吗?我有很长的文本,如果它被选中,我希望看到它,但如果它不活跃,我希望看到它被裁剪。
我在 draw 事件中关注,但它总是以相同的大小绘制选项卡。
if (e.State == DrawItemState.Selected)
{
e.Graphics.FillRectangle(Brushes.White, e.Bounds.Left, e.Bounds.Top, e.Bounds.Width, e.Bounds.Height);
}
else
{
e.Graphics.FillRectangle(Brushes.LightGray, e.Bounds.Left, e.Bounds.Top, e.Bounds.Width, e.Bounds.Height);
text = text.Length > 10 ? text.Substring(0, 10) + "..." : text;
}
e.Graphics.DrawString(text, e.Font, Brushes.Black, e.Bounds.Left + 17, e.Bounds.Top + 3);
提前致谢。
【问题讨论】:
-
可以问一下使用 OwnerDrawFixed 的意图吗? TabControl 是一个难以调整的控件,它使用传统的绘图方法并且有已知的错误启动。您是继承和自定义 TabControl 还是按原样使用它?
-
@JCollins 我在上面画了一些图像。是聊天窗口。有用户可用性,名称,它通过消息图标和橙色背景指示新消息。我只有自己的 TabPages。 TabControl 没有变化。
-
您要覆盖的抽奖事件到底在哪里?如果您要覆盖 TabControl 并创建自己的继承控件,则可以在构造函数中使用 SetStyle(ControlStyles.UserPaint, True) 然后覆盖 OnPaint 和/或 OnPaintBackground 然后您将拥有完全的控制权。不过,您将负责绘制标签。
-
@JCollins 如果你的意思是这个,我正在为 TabControl 使用 DrawItem 事件。我没有自己的 TabControl,我想如果我真的想这样做,那会很复杂。我可以问你我的问题的第 2 部分:如何调整已裁剪文本的非活动标签的大小?你知道一些在 Draw 事件中显示一些样式的网站吗?我想使用默认的选项卡样式,但我也想要自己的绘图。所以一些如何设置标签样式的灵感。
-
如果我没记错的话,您是在问为什么标签没有针对可变长度文本调整大小? TabControls 对标签大小的控制很少,要么像您的情况一样固定,要么系统自动设置大小。基本上没有办法,无论是否继承,都可以覆盖该行为。关于绘图,您要么完全控制,要么将其留给系统。我花了很多时间尝试自定义选项卡控件,这非常痛苦。没有具体的链接,但对于人们完成的项目,我会使用 sourceforge。
标签: c# winforms .net-3.5 tabs tabcontrol