winforms 在非开发PC上运行时,Windows窗体应用程序(.NET核心)中缺少元素

qzwqbdag  于 2022-12-23  发布在  Windows
关注(0)|答案(1)|浏览(142)

我最近开发了我的第一个windows窗体应用程序(.NET核心),而且它在我的本机上运行得很好,但是当我部署到其他机器上时遇到了一些问题。它开始时出现了一个未处理的异常,与页面上的字体大小“NaN”有关,所以我添加了一些异常处理逻辑,现在允许程序在其他PC上启动。但是任何使用字体的表单元素都没有显示出来。我在应用程序中有一些动态字体缩放,但是禁用它并没有解决任何问题,所有包含字体字段的文本框和按钮都是空白的。
由于这种情况只发生在其他PC上,而不是我一直在使用的开发计算机上,所以我意识到这可能是一个依赖性问题,但我不太确定是如何发生的。
此外,为了覆盖我的基础,我使用Visual Studio中的发布工具,简单地复制在Visual Studio中编译的.exe和. dll,然后将它们放在闪存驱动器上传输到其他2台测试PC,以确保应用程序是可移植的。
下面是我用来调整屏幕元素大小和字体大小的处理程序。我添加了“Nan”逻辑来解决这个异常,但似乎有一个更深层次的问题,但我目前还不知道是什么!
'

private void ResizeControl(Rectangle r, Control c, float h)
        {
            float xRatio = Width / (float)(originalFormSize.Width);
            float yRatio = Height / (float)(originalFormSize.Height);

            int newX = (int)(r.Location.X * xRatio);
            int newY = (int)(r.Location.Y * yRatio);

            int newWidth = (int)(r.Width * xRatio);
            int newHeight = (int)(r.Height * yRatio);

            float newFontSize = (h * ((xRatio + yRatio) / 2));
            Math.Floor(newFontSize);
            
            if (float.IsNaN(newFontSize))
            {
                newFontSize = h;
            }
            if (newFontSize == 0)
            {
                newFontSize = 24.0f;
            }

            c.Location = new Point(newX, newY);
            c.Size = new Size(newWidth, newHeight);
            Font newFont = new("Segoe UI", newFontSize, FontStyle.Regular);
            Font = newFont;
            selectionBox.Font = Font;
        }

'

57hvy0tb

57hvy0tb1#

在对表单大小进行了一些记录和检查之后,发现应用程序中的许多按钮和其他工具在表单加载之前都被重新调整了大小,并且被设置为0。我注意到开发PC上也发生了这种情况。我添加了一个标记,以在表单加载之前不进行任何重新调整,这在我的本地计算机和测试计算机上都解决了这个问题。

相关问题