【问题标题】:Winforms TabControl alignment problemsWinforms TabControl对齐问题
【发布时间】:2011-02-07 23:47:21
【问题描述】:

当我将 TabControl 对齐设置为 LeftRight 时,它会在选项卡按钮和选项卡页面区域之间留下巨大的空间。如何摆脱这个无用的空间?

TabControl.Appearance 设置为Buttons,因为如果设置为Normal,按钮上的文字就会消失。

更新:
当我将TabControl.Alignment 设置为Bottom 并将TabControl.Appearance 设置为Normal 时,按钮看起来是倒置的(橙色线应该在下面)

当我将TabControl.Alignment 设置为Bottom 并将TabControl.Appearance 设置为Buttons 时,TabPage 上没有可放置控件的区域

【问题讨论】:

  • 有趣。我刚刚在 C# 2010 Express 中尝试过这个,我看到了你在这里展示的行为。但是,当我将Appearance 更改为Normal 时,一切看起来都很正常并且文本仍然可见。在Normal 模式下,您是否看到过文本(在设计时或运行时)?
  • 不,正常模式下左对齐或右对齐时没有文本。这就是我改变模式的原因
  • 侧边对齐的标签很丑,而且文本很难阅读。你为什么做这个?将它们放在它们所在的顶部或底部。如果您遵循标准约定,您的生活将会简单得多。
  • 好的,我在底部还有另一个问题。看图片
  • @Code Gray,问题是我不喜欢它们在我的场景中的顶部或左侧。它们应该是底部对齐或右对齐

标签: c# winforms tabcontrol tabpage


【解决方案1】:

这是原生选项卡控件的 XP 视觉样式实现的一个众所周知的问题,只有与顶部对齐的选项卡才能正确呈现。直到 Windows 7 才解决此错误。解决方法是有选择地关闭样式。向您的项目添加一个新类并粘贴如下所示的代码。编译。将新控件从工具箱顶部拖放到表单上,然后根据自己的喜好更改 Alignment 属性。它看起来不会比这更漂亮。

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;

class FixedTabControl : TabControl {

    protected override void OnHandleCreated(EventArgs e) {
        SetWindowTheme(this.Handle, "", "");
        base.OnHandleCreated(e);
    }

    [DllImportAttribute("uxtheme.dll")]
    private static extern int SetWindowTheme(IntPtr hWnd, string appname, string idlist);
}

【讨论】:

  • 我应该将其视为“功能”吗?
  • 能够用几行代码解决问题吗?是的,这是一个相当大的功能。 Winforms 总是做得很好。如果您的意思是“这看起来不是很奇怪,我是否应该将其称为功能”,那么,不,没有人见过具有视觉风格的垂直标签。它们看起来很正常。
  • 谢谢你的作品。如果您尝试修复已经有 TabControl 的表单,请编辑 Designer.cs 文件并搜索 System.Windows.Forms.TabControl 并将其替换为 FixedTabControl。
  • @HansPassant “这是一个众所周知的问题”,你知道这个错误是否曾经提交给微软吗?
  • 我 100% 确定他们知道这一点。
【解决方案2】:

Microsoft documentation Remarks related to this issue

当 Alignment 属性设置为 Left 或 Right 时,Multiline 属性自动设置为 true。

当您将 Appearance 属性设置为 FlatButtons 时,它只会出现 因此,当 Alignment 属性设置为 Top 时。否则,该 Appearance 属性显示为好像设置为 Buttons 值。

当您将 Appearance 属性设置为 Buttons 时,您还必须设置 对齐属性到顶部,以便按钮正确显示。

注意

当您将 Appearance 属性设置为 Buttons 时,您还必须设置 对齐属性到顶部,以便显示标签页内容 正确。此外,当启用视觉样式时, Alignment 属性设置为 Top 以外的值,即选项卡内容 可能无法正确渲染。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 2010-11-30
    • 2010-11-08
    • 2013-01-07
    • 2018-10-28
    相关资源
    最近更新 更多