VB.NET 中的 TabControl 对齐问题

问题描述 投票:0回答:2

我在 VB.NET 中使用左对齐的 TabControl 时出现奇怪的行为。截图:

alt text

我想要的是让选项卡与向左旋转 90 度时的字面意思相同。

这与我没有(上帝禁止)使用标准 XP 主题有关吗?有什么解决方案可以让它发挥作用吗? (虽然很难,但我不想要风格对比鲜明的控件,我希望程序看起来一致)

谢谢!

幸福的结局:

alt text

vb.net winforms tabcontrol alignment visual-styles
2个回答
4
投票

好的,我解决了这个问题。如果其他人有同样的问题,请使用 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。

检查this.more来自作者。

问题解决了!! =D


2
投票

是的,这是选项卡控件的视觉样式渲染器中的错误。看起来你已经找到了替代品。另一种低影响的方法是有选择地禁用控件的视觉样式。它将恢复为战舰灰色,正确绘制垂直标签。标签页内容仍会正确呈现。

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);
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.