c#中的刷新面板

时间:2013-02-27 19:18:24

标签: c# winforms

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

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

当按下-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);

} 

2 个答案:

答案 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);
}