背景:
我创建了User Control
。出于某种原因,我想以不同的大小使用此控件。为了在重新调整大小时保留User Control
的初始“模板”,我在控件内的不同元素上使用属性锚点。
因此,当我在设计时创建控件时,我可以手动重新调整控件并保留其原始“模板”。< / p>
创建控件时,它看起来像这样:
重新调整大小后:
如您所见,属性 Anchor 效果很好。
问题:
我遇到的问题是,当重新加载控件时,创建的大小与初始大小不同,内部的所有元素都返回到初始位置:
我不知道这是否是我尝试实现目标的更好方法。请记住,我在设计时添加并重新调整控件的大小。
谢谢。
编辑:
我认为我的问题是由设计师造成的。例如:我在设计器中添加了我的控件,我重新调整它的大小,我运行解决方案。一切都很好。但是当我转到页面代码然后返回设计器时,控件内的元素返回到初始位置。
编辑2:
好的,我找到了一个解决方案,我只是将User control
的所有元素移到Panel
内。 出于某种原因我无法解释,它完美无缺。控制器停留在同一位置。
答案 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中测试