1

我正在使用 TabControl,并且我有 DrawFixed。我只想绘制标签而不是它下面的面板。

选项卡控制面板

我怎样才能删除它?

另外我想问一下,我可以更改标签大小吗?我有很长的文本,如果它被选中,我希望看到全部,但如果它不活跃,我希望看到它被裁剪。

我在绘图事件中关注,但它总是以相同的大小绘制选项卡。

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);

提前致谢。

4

2 回答 2

1

在您的问题中按时间顺序排列,您已经问过如何摆脱顶部的那个栏。如果您坚持使用选项卡仅控制固定控件集的内容的“人造”选项卡页,那么将选项卡控件的高度缩小到不可见的点可能是一个可以接受的解决方案。我刚刚尝试过,经过一些调整,它看起来主要是我认为你所追求的。作为记录,我建议按预期实际使用选项卡页,即作为控件的主机,即使您制作了一个自定义控件,将所有您希望可见的控件汇集在一起​​。这将更适合标签范式。

对于第二点,您想调整选项卡的大小。不可能的。该框架为DrawStyle、 Normal 和OwnerDrawFixed. Normal允许 Windows 根据文本和字体设置选项卡大小,这OwnerDrawFixed意味着选项卡大小是完全固定的。对此没有更多的控制权。OwnerDrawFixed但是,您可以访问要OnDrawItem用于绘制选项卡本身的事件。

现在看来您已经咬紧牙关并将 UserPaint 设置为 True,这意味着您现在正在完成所有绘图。我建议此时设置DrawStyleNormal,然后您可以混合一些幕后文本以让 Windows 自动控制选项卡宽度。我会警告这不会很健壮,因为每个人都有不同的字体设置和几个像素,并且什么都不会正确绘制。

所以在这里我要指出TabControl.GetTabRect(index As Integer),你可以用来获取给定选项卡的边界矩形的方法。我在所有选项卡索引的循环中使用它,然后在每个选项卡提供的矩形内为选项卡执行我需要的所有绘图。这意味着我不需要使用OwnerDrawFixed来获得在其中绘制的边界。

然而,如果你想要更好的控制,你有 80% 的方法来实现你想要看到的任何控制,从Control或开始UserControl。类似的外观可以通过重叠按钮实现,并带有一些逻辑来绘制和布局它们。然后你也可以获得你想要的所有文本外观。我自己也考虑过,但没有因为我还在主持TabPages。既然你摆脱了它,那就更容易了......

于 2012-09-18T23:15:42.307 回答
0

只需使用页面文本默认属性,它会根据文本的大小为您自动修复标签大小..然后自己绘制文本..如果您仍然需要额外的空间来绘制图像或其他东西,那么使用填充,这是选项卡控件的属性不是选项卡页。我希望它对你有帮助。

于 2013-02-07T06:10:25.093 回答