Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用户控件锚属性问题_C#_.net_Winforms_User Controls - Fatal编程技术网

C# 用户控件锚属性问题

C# 用户控件锚属性问题,c#,.net,winforms,user-controls,C#,.net,Winforms,User Controls,上下文: 我创建了一个用户控件。出于某种原因,我想使用不同大小的控件。要在重新调整大小时保留我的用户控件的初始“模板”,我在控件内的不同元素上使用属性锚定 因此,当我在设计时创建控件时,我可以手动重新调整控件的大小,并保留控件的原始“模板” 创建控件时,其外观如下所示: 重新调整尺寸后: 如您所见,属性锚定运行良好 标签和图片保持在中间。 “?”号留在左边的拐角处 问题: 我遇到的问题是,当重新加载控件时,创建的控件的大小与初始控件的大小不同,其中的所有元素都会返回到其初始位置: 我不

上下文:

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

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

创建控件时,其外观如下所示:

重新调整尺寸后:

如您所见,属性锚定运行良好

    标签和图片保持在中间。
  • “?”号留在左边的拐角处
问题:

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

我不知道这是不是更好的方式来实现我的目标。请记住,我在设计期间添加并重新调整了控件的大小

多谢各位

编辑:

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

编辑2:


好的,我找到了一个解决方案,我只是将
用户控件的所有元素移动到
面板中由于一些我无法解释的原因,它工作得非常好。控件保持在同一位置

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

用户控件的锚定、停靠和自动调整大小似乎令人非常困惑。我发现这表明您将
AutoSize
属性设置为
False
,我这样做了,但它仍然没有纠正我的问题。但是当我尝试您的解决方案时,我还注意到有两个
AutoSize
属性的副本!我已经将UserControl designer中的
AutoSize
设置为
False
,但是添加UserControl实例的表单设计器在实例上也有一个
AutoSize
,并且这个值不同(仍然是
True
)。当我也将其设置为
False
时,一切正常(面板就位)。然后我拆下了你建议的面板,一切仍然正常。因此,我想诀窍是确保在UserControl designer中检查UserControl的所有属性,并在使用控件的窗体设计器中检查UserControl的所有属性。那么您就不需要面板了。

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

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


在VS2013中测试

我在VS2015项目中遇到过类似的问题,不幸的是,您的答案都没有帮助。找到了干净且有效的溶液。 为了更快地导航,这里介绍了在我的项目中是如何完成的(c++/cli,不是c#,但想法是一样的):


您可以使用ResizeEnd事件应用它们在ResizeBegin中使用的相同属性。当你说重新加载时,是不是控件得到了一个完整的新实例?如果是这样的话,它应该总是调用InitializeComponent来应用设计器中定义的属性。我不确定该尝试什么,因为我的问题似乎是设计器中的原因。我在设计器中添加控件,重新调整大小,运行解决方案。一切正常。但是当我转到页面的代码,然后返回到设计器时,控件中的元素返回到它们的初始位置……这太模糊了。您需要解释该控件是如何“重新加载”的,但不再使用其原始设计大小。以及为什么不再进行加载控件后发出的正常PerformLayout()调用。重新加载控件后,请使用调试器验证该控件的锚定值。此外,Dock属性会覆盖Anchor属性,因此您也必须验证这一点。好的,我现在正在查看这一点,谢谢。我回答了我的问题,以帮助任何与我有相同问题的人。如果你能给出一个更好的解决方案,请不要犹豫编辑我的答案。
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 */

}