我在 VB.NET 中使用左对齐的 TabControl 时出现奇怪的行为。截图:
我想要的是让选项卡与向左旋转 90 度时的字面意思相同。
这与我没有(上帝禁止)使用标准 XP 主题有关吗?有什么解决方案可以让它发挥作用吗? (虽然很难,但我不想要风格对比鲜明的控件,我希望程序看起来一致)
谢谢!
幸福的结局:
好的,我解决了这个问题。如果其他人有同样的问题,请使用 this control。根据麻省理工学院的许可,它是免费的。作者截图:
注意作者做了两个控件。我的建议:第二个对 cleartype 的支持不正确(它在子像素渲染后旋转),但它更容易使用,并且具有更好的填充控制。大胆试试吧! =)
编辑
如果您使用 C++ 并且为此需要它,那么有一种方法。结果图片:
alt 文本 http://www.codeguru.com/dbfiles/get_image.php?id=6385&lbl=CXPTABCTRL_GIF&ds=20040309
作者非常详细地描述了他是如何做到的,这很好,例如:
(来源:codeguru.com)
这个是文章链接
另一个非常好的方法是 SkyBound 的多用途 VisualStyles 组件。似乎二进制文件是免费的,但源代码不是,非常公平。我稍后会检查它,但如果你需要一些视觉样式错误修复,这似乎是一个选择。
(来源:skybound.ca)
来自作者:
首先,它取消了 XP 主题错误,默默地,高效地 自动地。但它也提供了一个 一组简单的类,你可以 用于绘制您自己的控件 Windows XP 主题 API。
问题解决了!! =D
是的,这是选项卡控件的视觉样式渲染器中的错误。看起来你已经找到了替代品。另一种低影响的方法是有选择地禁用控件的视觉样式。它将恢复为战舰灰色,正确绘制垂直标签。标签页内容仍会正确呈现。
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);
}
}