0

winforms を使用して複数ページのアプリケーションを作成しようとしています。複数のパネルを使用することにしました。各パネルは異なるページを表しているため、異なるコンテンツを表示する必要があるときにそれらを切り替えることができます。実行時の私の問題は、パネルを切り替えようとすると機能しないことです。

私のコード:

private void Form2_Load(object sender, EventArgs e)
{
    panel2.Visible = false;
}

private void label4_Click(object sender, EventArgs e)
{
    panel1.Visible = true;
}

private void label5_Click(object sender, EventArgs e)
{
    panel2.Visible = true;
    panel1.Visible = false;
}
4

7 に答える 7

1
private void Form2_Load(object sender, EventArgs e)
{
    panel2.Visible = false;
}

private void label4_Click(object sender, EventArgs e)
{
    panel1.Visible = true;
    panel2.Visible = false;
}

private void label5_Click(object sender, EventArgs e)
{
    panel2.Visible = true;
    panel1.Visible = false;
}
于 2013-10-19T19:33:24.070 に答える
0

私は次のようにします: パネルに名前を付けるとき、それらの名前はすべて「pnl」で始まります。物の名前に妥当性があるので、このように検索できます。

private void panelVibility(Control ctr)
{
    foreach (Control item in this.Controls)
    {
        if (item.Name.StartsWith("pnl"))
        {
            item.Location = new Point(12, 27);
            item.Visible = false;
        }
    }
    ctr.Visible = true;
}

たとえば、button_Click を介してメソッドを呼び出すときに、表示するパネルをパラメーターとして送信します。

private void btnPnl1_Click(object sender, EventArgs e)
{
    panelVibility(pnl1);
}
于 2016-05-27T14:57:30.883 に答える
0

パネルのレイアウト方法によって異なります。パネルをフォームに追加していないか、パネルを間違った場所に配置しているとは思えません。に を入力したいと思いますPanels。メソッドをForm使用して、BringToFont()代わりにパネルを表示できます。これを試して:

private void Form2_Load(object sender, EventArgs e){
  panel1.Dock = panel2.Dock = DockStyle.Fill;
  panel1.Parent = panel2.Parent = this;//this refers to Form2
}

private void label4_Click(object sender, EventArgs e) {
  panel1.BringToFront();//show panel1
}

private void label5_Click(object sender, EventArgs e){
  panel2.BringToFront();//show panel2
}

: 実際の動作を確認するlabel4_Clickには、label5_ClickForm2_Loadが正しく登録されていることを確認してください。BackColor of次のように、 panel1 panel2`もand別の方法で設定する必要があります。

//your Form2 constructor
public Form2(){
  label4.Click += label4_Click;
  label5.Click += label5_Click;
  Load += Form2_Load;
  panel1.BackColor = Color.Green;
  panel2.BackColor = Color.Red;
}

パネルをすべてのフォーム クライアントの四角形に塗りつぶすため、label4を に追加し、 に追加するpanel2必要label5がありますpanel1

于 2013-10-20T06:49:53.060 に答える
0

panel2 が panel1 内にある場合、 panel1 は panel2 の親になります (フォームではなく)。この場合、親 (panel1) が非表示の場合、panel2 を可視として設定しても効果はありません。パネルを並べて配置し、ボタンのクリックが機能するかどうかを確認できます。

この問題の回避策は、コードでParentプロパティを設定することです。

    private void Form1_Load(object sender, EventArgs e)
    {
        panel1.Parent = this;
        panel2.Parent = this;           
    }
于 2013-10-22T10:32:07.880 に答える
0

さらに、パネルを再配置する必要があります

panel1.Location = new Point(0, 0); //the preferd new postion
panel2.Location =new Point(1000,1000)//far away
panel2.Visible=false;
panel1.Visible=true;
于 2013-10-20T07:05:35.313 に答える
0

これは、あるパネルを別のパネルの上に配置していて、これらのパネルが重なり合っているためです。したがって、プログラムを実行するときに少なくとも 1 つのパネルを表示することはできません。プログラムにバグはありませんが、この問題を回避するには、次の手順に従ってください。

1.フォームの読み込み中は、最初はすべてのパネルが非表示になっていることを確認してください。

2. パネルの可視性を true に変更する際に、残りのすべてのパネルの可視性が false (非表示) に設定されていることを確認します。

3.互いに重なっているパネルを削除してみてください。

ありがとうございました。

于 2013-10-20T13:00:39.487 に答える
0

これに対する別の解決策は、TabControlヘッダーなしで使用することです。これは、タブが表示され、設計時にタブを切り替えることができ、実行時に非表示になるため、IDE で管理するのがはるかに簡単です。

これを参照してください: タブ ヘッダーのない TabControl を作成するにはどうすればよいですか?

ウィザードなどに最適です:-)

現在アクティブなタブを変更するボタンを追加するだけです。

private void button1_Click(object sender, EventArgs e)
    {
        tabControl1.SelectTab("tabPage2");
    }
于 2013-10-20T14:04:52.910 に答える