2

私はC#.Netを初めて使用します。パネルが入ったフォームがあります。パネルの1つはMainPanelです。起動後、MainPanelは空です。ユーザーの選択に基づいて、いくつかのコントロールをロードしたいと思います。JavaのCardLayoutに似たものです!各パネルには多くのコントロールがあり、プログラムで追加したくありません。実際、質問は「いくつかのパネルをデザイナーで設計し、ユーザーの選択に基づいてすべて1つのフォームで表示/非表示にする方法はありますか?」です。

ここに画像の説明を入力してください

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

4

3 に答える 3

3

はい、独自のクラスにUserControlsという新しいオブジェクトを作成します。プログラムで追加および削除できますが、デザイナで作成してください。

コントロールを変更するときにちらつきを防ぐには、次のようにします。

Control ctlOld = frmMain.Controls[0]; // this will allow you to remove whatever control is in there, allowing you to keep your code generic.
ctlNextControl ctl = new ctlNextControl(); // this is the control you've created in another class
frmMain.Controls.Add(ctlNextControl);
frmMain.Controls.Remove(ctlOld);

ユーザーコントロールを作成し、好きな名前を付けます。例として、ここでいくつかの名前を付けます。

ctlGear
ctlMap
ctlGraph
ctlCar
ctlPerson

これらの5つのファイルをUserControlsとしてプロジェクトに追加します。好きなようにデザインしてください。

使いやすさのために、さまざまなボタンの列挙型を作成します。

public enum ControlType {
    Gear,
    Map,
    Graph,
    Car,
    Person
}

それらを作成したら、それらの各ボタンのボタンクリックイベントで、この新しいメソッドへの呼び出しを追加します。

private void SwitchControls(ControlType pType) {
    // Keep a reference to whichever control is currently in MainPanel.
    Control ctlOld = MainPanel.Controls[0];
    // Create a new Control object
    Control ctlNew = null;
    // Make a switch statement to find the correct type of Control to create.
    switch (pType) {
        case (ControlType.Gear):
           ctlNew = new ctlGear();
           break;
        case (ControlType.Map):
           ctlNew = new ctlMap();
           break;
        case (ControlType.Graph):
           ctlNew = new ctlGraph();
           break;
        case (ControlType.Car):
            ctlNew = new ctlCar();
            break;
        case (ControlType.Person):
            ctlNew = new ctlPerson();
            break;
        // don't worry about a default, unless you have one you would want to be the default.
    }

    // Don't try to add a null Control.
    if (ctlNew == null) return();

    MainPanel.Controls.Add(ctlNew);

    MainPanel.Controls.Remove(ctlOld);
}

次に、ボタンクリックイベントで、次のようなものを作成できます。

private void btnGear.Click(object sender, EventArgs e) {
    SwitchControls(ControlType.Gear);
}

同じことが他のクリックイベントにも当てはまります。パラメータのControlTypeを変更するだけです。

于 2012-06-14T18:45:02.910 に答える
2

他のパネルでVisibleプロパティを設定するだけです。ただし、LarsTechは、必要に応じてユーザーコントロールをメインパネルに切り替えるのが最適な場合があることは間違いありません。

于 2012-06-14T18:44:09.650 に答える
1

これらの他の「パネル」をユーザーコントロールとして作成してみてください。フォームと同じようにデザインできます。

または、このHans Passantの回答を使用して、TabControlを使用し、実行時にタブを非表示にすることもできます 。C#でのWindowsフォーム用のウィザードの作成

于 2012-06-14T18:43:28.290 に答える