【问题标题】:Is there a way to find the actual size of a form that is resizing itself with AutoSize=true?有没有办法找到使用 AutoSize=true 调整自身大小的表单的实际大小?
【发布时间】:2016-05-29 15:32:23
【问题描述】:

有没有办法找到使用AutoSize=true 调整自身大小的表单的实际大小?

例如,我有一个在运行时创建控制器的表单,我希望将一些控制器放置在相对于表单大小的特定位置。

当我尝试从 This.WidthThis.RightThis.PreferredSize.Width 表单中获取时,它们返回的值太大,所以我怀疑 AutoSize 没有触及的表单有一些默认大小。

有没有办法强制AutoSize 更新表单的当前大小?

【问题讨论】:

  • 等到 Load 事件触发,这是使用该事件的少数真正原因之一。强迫它根本不会让您领先,在创建本机窗口之前您无法获得实际大小。并且一定要使用 ClientSize 属性,如果你关心布局,你几乎不会使用 Size,因为它仍然是不可预测的。
  • @HansPassant 通过加载事件你的意思是InitializeComponent()?
  • @kuhaku 不,他的意思是Load 事件。

标签: c# .net winforms visual-studio


【解决方案1】:

WidthHeightSize 将始终返回表单的“实际”大小。但是,您可以订阅 SizeChanged 事件以收到任何更改的通知,例如:

public Form1()
{
   this.SizeChanged += Form1_SizeChanged;
   InitializeComponent();
}

private void Form1_SizeChanged(object sender, EventArgs e)
{
    Debug.WriteLine(this.Width + "/" + this.Height);
}

或者,如果您只需要一次(在 AutoSize 之后),您可以使用 Load 事件来代替:

public Form1()
{
    this.Load += Form1_Load;
    InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
   Debug.WriteLine(this.Width + "/" + this.Height);
}

更多信息:

Order of Events in Windows Forms
Form.Load Event
Control.SizeChanged Event

【讨论】:

  • 这不完全是我问的问题,我问是否在将控制器添加到某些位置之后,并且仍在初始化表单,以便能够从自动调整大小中获取其大小。它与用户调整大小无关。
猜你喜欢
  • 2021-11-27
  • 2012-10-19
  • 2021-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-11
  • 1970-01-01
  • 2021-08-30
相关资源
最近更新 更多