1

私はいくつかのプロジェクトに取り組んでいます...そしてユーザーを追加すると、サポートの利点を持つ趣味に関する情報があります-同じ人にさらに追加-趣味。

情報をいくつかのユーザー コントロールに分割し、これらのユーザー コントロールを panel 内に動的に配置することを考えています。

-add more- リンクを押すと、新しいコントロール (label、textbox ...) が作成され、それらを含むユーザー コントロールのサイズが変更されます。

それはうまくいきますが、問題は -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);

    }
}

パネルコードは、ボタン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);

} 
4

2 に答える 2

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 に答える
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 に答える