1

我正在做一些项目......当我添加一个用户时,会有一个关于爱好的信息,它具有支持的优势 - 向同一个人添加更多爱好。

我正在考虑将我的信息分成几个用户控件,并在面板内动态定位这些用户控件。

当按下 -add more- 链接时,它会构建一个新控件(标签、文本框...)并调整包含它们的用户控件的大小。

它可以工作,但问题是当我按下 -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);

    }
}

面板代码是在按下 button1 时定位:

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);

} 
4

2 回答 2

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 个新文本框。您可以使用与此类似的模式来通过您自己的控件完成您正在寻找的内容。它还确保面板可以滚动,以便用户可以在不调整面板或主窗体的大小的情况下从列表中向下移动。

于 2013-02-27T19:41:23.830 回答
0

尝试:

看看这个链接:

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);
}
于 2013-02-27T19:45:51.517 回答