はい、独自のクラスに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を変更するだけです。