繁体   English   中英

C#tabControl DrawFixed

[英]C# tabControl DrawFixed

我正在使用TabControl,并且已经有了DrawFixed。 我只希望仅绘制选项卡,而不绘制其下方的面板。

tab控制面板

如何删除?

我也想问一下,我可以更改标签的大小吗? 我有很长的文本,如果选中它,我想查看全部,但是如果它不处于活动状态,我希望看到它被裁剪。

我在绘制事件中一直关注,但是它始终以相同的大小绘制选项卡。

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

提前致谢。

按时间顺序排列,您已经问过如何摆脱顶部的那个酒吧。 如果您坚持使用“人造”选项卡页面,其中选项卡仅控制固定控件集的内容,那么将选项卡控件的高度缩小到不可见的程度可能是可以接受的解决方案。 我只是尝试了一下,并进行了一些调整,看起来基本上就像我认为的那样。 对于记录,我建议实际上按预期使用选项卡页,即将其用作控件的宿主,即使您制作了一个自定义控件,该控件将希望显示的所有控件组合在一起。 这将更好地适应选项卡范式。

第二点,您想调整标签的大小。 不可能。 该框架为DrawStyle提供了两个选项:Normal和OwnerDrawFixed Normal允许Windows根据文本和字体设置选项卡大小, OwnerDrawFixed表示选项卡大小是完全固定的。 对此没有更多控制权。 但是, OwnerDrawFixed使您可以访问OnDrawItem事件,该事件是您用来绘制选项卡本身的方式。

现在看来,您已经把项目符号设置为True了,这意味着您正在绘制所有图形。 我建议此时将DrawStyle设置回Normal ,然后可以合并一些幕后文字,以使Windows自动控制标签宽度。 我会警告说,由于每个人的字体设置都不同,并且像素数变少,因此没有任何效果。

因此,在这里我将指出TabControl.GetTabRect(index As Integer) ,该方法可用于获取给定选项卡的边界矩形。 我在所有选项卡索引中循环使用了此选项,然后在每个选项卡提供的矩形内完成了该选项卡所需的所有绘图。 这意味着我不需要使用OwnerDrawFixed即可在其中绘制边界。

但是,如果仍然希望获得更好的控制,则可以从ControlUserControl开始,完全实现要查看的任何控件,都可以达到80%的方法。 重叠的按钮具有某种逻辑,可以绘制和布局它们,可以实现类似的外观。 然后,您还可以获得所需的所有文本外观。 我本人也考虑过同样的问题,但没有考虑,因为我仍在托管TabPages 既然您摆脱了困境,那将变得更加容易...

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM