gpt4 book ai didi

c# - 对话框有未请求的额外空间

转载 作者:太空狗 更新时间:2023-10-29 21:53:25 24 4
gpt4 key购买 nike

我设计了一个 Windows 窗体对话框,它应该可以在其他应用程序、WPF 和 Windows 窗体中重复使用。当我在 Windows 窗体应用程序中使用它时,它工作正常,但在 WPF 应用程序中调用时它会导致一些布局问题。从屏幕上的像素、WinForms API 所说的以及 Spy++ 测量时,尺寸和大小不一致。在没有调试器的情况下运行时,窗口比 Spy++ 所说的要宽和高 10 个像素,也比我说的应该是。这里有什么问题?除了说这是一个严重损坏的 .NET Framework,我什么也找不到。

这是表单类代码:

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

namespace DialogTestApp
{
internal class MyDialog : Form
{
public MyDialog()
{
Text = "Title";
Width = 500; // -> actually 510 (Spy++ says 500)
Height = 300; // -> actually 310 (Spy++ says 300)
Font = SystemFonts.MessageBoxFont;
FormBorderStyle = FormBorderStyle.FixedDialog;
MaximizeBox = false;
MinimizeBox = false;
ShowInTaskbar = false;
StartPosition = FormStartPosition.CenterScreen;

TableLayoutPanel mainLayout = new TableLayoutPanel();
mainLayout.BackColor = Color.FromArgb(255, 171, 255); // pink
mainLayout.Dock = DockStyle.Fill;
mainLayout.Margin = Padding.Empty;
mainLayout.Padding = Padding.Empty;
mainLayout.RowStyles.Add(new RowStyle(SizeType.AutoSize)); // Only use minimum required space
mainLayout.RowStyles.Add(new RowStyle(SizeType.Percent, 100));
Controls.Add(mainLayout);

int row = 0;
Label label = new Label();
label.Text = "Hello world. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque suscipit vestibulum gravida.";
label.Font = new Font(Font.FontFamily, 12);
label.MaximumSize = new Size(mainLayout.Width, 0);
label.AutoSize = true;
label.Dock = DockStyle.Fill;
label.Margin = Padding.Empty;
label.BackColor = Color.FromArgb(58, 171, 58); // green
label.ForeColor = Color.White;
mainLayout.Controls.Add(label, 0, row++);

TextBox textBox = new TextBox();
textBox.Dock = DockStyle.Fill;
textBox.Margin = Padding.Empty;
textBox.Multiline = true;
textBox.ScrollBars = ScrollBars.Both;
mainLayout.Controls.Add(textBox, 0, row++);
}
}
}

只需将此文件放入一个空的 WPF 应用程序项目中,然后从应用程序构造函数中调用它:

public MainWindow()
{
InitializeComponent();

new MyDialog().ShowDialog();
Application.Current.Shutdown();
}

这是调试器的样子:

enter image description here

没有:

enter image description here

额外的粉红色边框是不应该出现的 10 个像素。绿色标签设置为填满所有空间。

最佳答案

即使没有 TableLayoutPanelLabel 并使用 System.Windows.Forms.Application.Run(new MyDialog()),问题仍然存在。导致问题的行是 FormBorderStyle = FormBorderStyle.FixedDialog;

似乎与此处描述的问题相同:Form tells wrong size on Windows 8 — how to get real size?

解决方法:

        mainLayout.SizeChanged += delegate {
label.MaximumSize = new Size(mainLayout.Width, 0);
//MessageBox.Show("hi"); // called when not ran in debugger
};

关于c# - 对话框有未请求的额外空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34014982/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com