用户控制锚属性问题

时间:2013-05-30 18:03:51

标签: c# .net winforms user-controls

背景:

我创建了User Control。出于某种原因,我想以不同的大小使用此控件。为了在重新调整大小时保留User Control的初始“模板”,我在控件内的不同元素上使用属性锚点

因此,当我在设计时创建控件时,我可以手动重新调整控件并保留其原始“模板”。< / p>

创建控件时,它看起来像这样:

Initial

重新调整大小后:

Re-Sized

如您所见,属性 Anchor 效果很好。

  • 标签和图片保持在中间。
  • “?”留在左角。

问题:

我遇到的问题是,当重新加载控件时,创建的大小与初始大小不同,内部的所有元素都返回到初始位置:

Problem

我不知道这是否是我尝试实现目标的更好方法。请记住,我在设计时添加并重新调整控件的大小。

谢谢。

编辑:

我认为我的问题是由设计师造成的。例如:我在设计器中添加了我的控件,我重新调整它的大小,我运行解决方案。一切都很好。但是当我转到页面代码然后返回设计器时,控件内的元素返回到初始位置。

编辑2:

好的,我找到了一个解决方案,我只是将User control的所有元素移到Panel内。 出于某种原因我无法解释,它完美无缺。控制器停留在同一位置。

4 个答案:

答案 0 :(得分:2)

解决方案是向Panel添加User Control并将其停靠在&#34;填充&#34;,然后将该元素放在此面板内。由于某种原因我无法解释,设计师会保留重新调整大小的控件元素的位置。

答案 1 :(得分:2)

UserControl的锚定,停靠和自动调整大小似乎非常混乱。我发现UserControl does not auto resize with the Form表示您将AutoSize属性设置为False,我做了,但仍然没有解决我的问题。但是当我尝试你的解决方案时,我也注意到AutoSize属性的两个副本!我已将UserControl设计器中的AutoSize设置为False,但添加了UserControl实例的表单设计器在实例上也有一个AutoSize,并且其中有一个不同的值(它仍然是True)。当我将其设置为False时,一切正常(面板就位)。然后我删除了你建议的面板,一切仍然有效。所以我想诀窍是确保在使用控件的表单设计器中的UserControl设计器中检查UserControl的所有属性。那你就不需要一个小组。

答案 2 :(得分:1)

我在VS2015项目中遇到过类似的问题,不幸的是 - 你的答案都没有帮助。找到了清洁且有效的解决方案here, in Jignesh Thakker answer。 为了更快地在这里导航它是如何在我的项目中完成的(c ++ / cli,而不是c#,但想法是相同的):

System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {
/* some code */

myUserControl = gcnew MyUserControl();
myUserControl->Dock = DockStyle::Fill;

tabPage1->Dock = DockStyle::Fill;
tabPage1->Controls->Add(myUserControl);

/* some code */

}

答案 3 :(得分:0)

将VS设计器中父窗体的Localizable属性设置为false。这解决了设计时的问题。 (切换属性后保存,关闭并重新打开表单)

如果您需要本地化应用程序,请在完成布局工作后将Localizable属性切换为true,并且不要关心VS设计器中的有线表示。在运行时它显示正确。

在VS2013中测试