我正在开展一些项目...当我添加一个用户时,会有一个关于爱好的信息,它具有支持的优点 - 给同一个人带来更多的爱好。
我正在考虑将我的信息分成几个用户控件,并在面板内动态定位这些用户控件。
当按下-add more-链接时,它会构建一个新控件(标签,文本框......)并调整包含它们的用户控件的大小。
这是工作但问题是当我按下 - 添加更多 - 包含它的用户控件调整好。但是面板没有再次构建,因此用户控件在没有重新排列的情况下超越了其他用户控件。
这是一个简单的用户控制代码,添加更多:
public partial class UserControl2 : UserControl
{
public UserControl2()
{
InitializeComponent();
}
private void UserControl2_Load(object sender, EventArgs e)
{
this.Size = new Size(this.Size.Width , sss.Size.Height * 3);
}
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
this.Size = new Size(this.Size.Width, sss.Size.Height * 6);
}
}
,面板代码是按下按钮1时的定位:
private void button1_Click(object sender, EventArgs e)
{
UserControl1 x1 = new UserControl1();
UserControl2 x2 = new UserControl2();
UserControl3 x3 = new UserControl3();
x1.Location = new Point(panel1.AutoScrollPosition.X , panel1.AutoScrollPosition.Y);
x2.Location = new Point(panel1.AutoScrollPosition.X , panel1.AutoScrollPosition.Y + x1.Size.Height);
x3.Location = new Point(panel1.AutoScrollPosition.X, panel1.AutoScrollPosition.Y + x1.Size.Height + x2.Size.Height);
panel1.Controls.Add(x1);
panel1.Controls.Add(x2);
panel1.Controls.Add(x3);
}
答案 0 :(得分:0)
如果您没有锚定控件并增加窗口大小,则无法在不重叠的情况下增加控件的大小。
虽然表单设计器可能看起来很流畅,但所有内容都是使用固定的位置和大小创建的。如果你开始增加控件的大小而不考虑其他控件,它将被覆盖它们。
您应该考虑锚定控件并在合理范围内增加窗口大小,或者不是更改基础大小,在面板中添加控件和所需位置,并为面板启用自动滚动。
这是示例代码:
private void button1_Click(object sender, EventArgs e)
{
if (!panel1.AutoScroll) panel1.AutoScroll = true;
for (int i = 0; i < 3; i++)
{
Textbox txt = new TextBox() { Location = new Point(3, (panel1.Controls.Count * 25) + 3 };
panel1.Controls.Add(txt);
}
}
每次单击该按钮,它都会向面板添加3个新文本框。您可以使用类似的模式来完成您自己控制所需的内容。它还确保面板可以滚动,以便用户可以在列表中下调,而无需调整面板或主窗体的大小。
答案 1 :(得分:0)
尝试:
查看此link:
private void button1_Click(object sender, EventArgs e)
{
panel1.Controls.Clear();
//Then add your existing code below
serControl1 x1 = new UserControl1();
UserControl2 x2 = new UserControl2();
UserControl3 x3 = new UserControl3();
x1.Location = new Point(panel1.AutoScrollPosition.X , panel1.AutoScrollPosition.Y);
x2.Location = new Point(panel1.AutoScrollPosition.X , panel1.AutoScrollPosition.Y + x1.Size.Height);
x3.Location = new Point(panel1.AutoScrollPosition.X, panel1.AutoScrollPosition.Y + x1.Size.Height + x2.Size.Height);
panel1.Controls.Add(x1);
panel1.Controls.Add(x2);
panel1.Controls.Add(x3);
}