【问题标题】:Why is the "Size" property of a control set by the designer when the control is docked to its parent in C# Winforms?为什么在 C# Winforms 中控件停靠到其父级时,设计器设置了控件的“大小”属性?
【发布时间】:2016-12-15 12:07:47
【问题描述】:

考虑TabelLayoutPanel。我使用 Visual Studio 设计器将其添加到Form1,并将Dock 属性设置为Fill。即使我使用Dock 属性设置了大小,Size 属性也在Form1.Designer.cs 中设置

this.tableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill;
this.tableLayoutPanel.Size = new System.Drawing.Size(1000, 800);

这是为什么呢?为什么设计师要加这条线? Dock 属性还不够吗?基于此,如果我动态创建这个TableLayoutPanel,我应该同时设置DockSize吗?

【问题讨论】:

  • 您不需要设置Size。设置Dock就足够了。
  • @RezaAghaei - 那么为什么 VS 会自动添加它?
  • 来吧,别再往窗帘后面看了,我们是来找巫师的,不是老头子
  • 您需要推理在代码中将 Dock 属性设置回 None 时会发生什么。一个合乎逻辑的答案是:“好吧,它应该使用设计器中设置的尺寸”。对,会的。
  • 我会说它是初始大小,当您删除停靠样式时它会保留。

标签: c# winforms size dock


【解决方案1】:

您无需设置Size。设置Dock就足够了。

设计器将所有值与其默认值不同的属性序列化。由于设置Dock属性改变了Size,设计者也对其进行序列化。

如果您将Dock 设置为None,以后将使用序列化大小。在运行时设置停靠控件的大小也没有任何效果。

【讨论】:

  • 注意:如果您从控件中移除扩展坞,控件将始终使用手动为其设置的最后一个尺寸。因此,如果您在运行时为停靠控件设置大小,则在移除停靠时将使用该大小,否则将使用序列化大小(这是最后一次手动设置的大小)。
【解决方案2】:

设计师为什么要加这条线?

这是控件设计者内部工作的结果。 Visual Studio 设计器采用未设置为其默认值的每个属性。 Size 最终为 boils down to the default value of Control.Size 的默认值,未指定。因此,它总是由设计者生成。参见 TabStop 示例,其中指定了默认值:只有在设计器中将其设置为 false 才会生成代码。

它对您的TableLayoutPanel 的视觉最终结果有任何影响吗?没有。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多