【问题标题】:Custom TabControl display issues自定义 TabControl 显示问题
【发布时间】:2016-04-09 20:56:39
【问题描述】:

我这几天一直在编写一个自定义绘制的选项卡控件,在大多数情况下,一切都很漂亮,而且做得非常出色...... 除非我在我的 Windows 10 计算机上使用它(在运行时)。

我已经回到最基本的几行代码来跟踪错误,但我终其一生都无法弄清楚这一点。

下面是唯一使用的代码,简而言之,我正在设计一个水平对齐的选项卡控件。

using System.Drawing;
using System.Windows.Forms;

namespace WindowsFormsApplication1.UI
{
    class TabControlTest : TabControl
    {
        public TabControlTest()
        {
            Alignment = TabAlignment.Left;
            SizeMode = TabSizeMode.Fixed;
        }
    }
}

我只是将自定义选项卡控件添加到表单中,添加了几个组框以供参考,并将表单的背景颜色更改为灰色,以便您可以清楚地看到选项卡控件。

现在,在设计时 2 个组框(1 个在选项卡控件中,1 个在表单中)完美对齐。

但是在运行时我看到了一个非常不同的结果。

正如您所见,控件的选项卡部分现在比设计时更大,由此产生的变化意味着选项卡的上下文也发生了移动。

如果我在 Windows 7 计算机上执行此操作,所有内容都会按照设计时的样子显示,应该如此!

我已经添加了 ImageSize,但它没有任何区别。

ItemSize = new System.Drawing.Size(30, 150);

我已经在我的 (Win10) 开发机器上重新安装了 VS。我不知道为什么以及如何解决这个问题。

任何/所有帮助将不胜感激。

【问题讨论】:

  • 缩放基于字体属性。在每个控件的“属性”窗口中右键单击“字体”,然后单击“重置”。

标签: c# winforms user-controls tabcontrol


【解决方案1】:

查看比较图像中的标签宽度,我相信这是由自动 Windows 控件缩放引起的另一个问题。我发现它是 dpiAware 选项在从 Visual Studio 中运行时自动设置,然后恢复到在 Visual Studio 外部时 Windows 实现的默认 Windows 缩放。

为完全防止在 Visual Studio 外部运行时自动缩放,您需要通过在 Application. Run() 被调用,如下例所示。这将使您的控件使用您设计坐标的原始分辨率。

static class Program
{
    [System.Runtime.InteropServices.DllImport("user32.dll")]
    private static extern bool SetProcessDPIAware();

    static void Main(string[] args)
    {
        if (Environment.OSVersion.Version.Major >= 6)
            SetProcessDPIAware();

        Application.Run(new UIMonitor());
    }
}

或者,如果您想保持缩放,您可以根据选项卡控件的宽度而不是特定位置来设置 GroupBox 位置。 (或者通过使用一些控制测量的组合而不是精确的 picel 放置。

【讨论】:

  • 这只是隐藏了问题,并没有解决它。当他在另一台以 96 dpi 运行的机器上运行程序时,他会遇到完全相同的问题。
  • 这样,我在所有机器上都得到了更加一致的坐标。但是,您指出的字体缩放可能会和我回答中的最后一句话一样。
  • 谢谢唐,这正是我的问题的答案。添加这个小sn-p代码解决了我的问题。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-03
  • 2017-02-15
相关资源
最近更新 更多