4

语境 :

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

因此,当我在设计时创建控件时,我可以手动调整控件的大小并保留它的原始“模板”。

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

最初的

重新调整大小后:

重新调整大小

如您所见,Anchor属性运行良好。

  • 标签和图片留在中间。
  • 这 ”?” 留在左边的角落。

问题 :

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

问题

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

谢谢你。

编辑 :

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

编辑 2:

好的,我找到了解决方案,我只是移动了User controla 里面的所有元素Panel由于某种我无法解释的原因,它工作得很好。控件停留在同一位置。

4

4 回答 4

3

解决方案是添加一个Panel并将User Control其停靠到“填充”,然后将元素放置在此面板内。由于某种我无法解释的原因,设计者保留了调整大小的控件元素的位置。

于 2013-05-30T18:37:02.657 回答
3

UserControl 的锚定、停靠和自动调整大小似乎非常令人困惑。我发现UserControl 不会使用 Form 自动调整大小,这表明您将AutoSize属性设置为False,我这样做了,但它仍然没有纠正我的问题。但是当我尝试您的解决方案时,我还注意到该属性有两个副本AutoSize!我已将AutoSizeUserControl设计器中False的 当我将其设置为AutoSizeTrueFalse此外,一切正常(面板就位)。然后我删除了您建议的面板,一切仍然有效。所以我想诀窍是确保在 UserControl 设计器使用控件的表单设计器中检查 UserControl 的所有属性。那么你不应该需要一个面板。

于 2014-05-12T17:20:35.917 回答
1

我在 VS2015 项目中遇到过类似的问题,不幸的是 - 你的回答都没有帮助。在 Jignesh Thakker 的回答中找到了干净且有效的解决方案。为了在这里更快地导航,它是在我的项目中完成的(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 */

}
于 2017-11-25T11:19:25.153 回答
0

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

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

在VS2013中测试

于 2015-01-28T16:10:44.347 回答