MainControlの新しいインスタンスに新しいusercontrolを追加しています。この新しいインスタンスは決して表示されないので、それを見ることはできません。現在のMainFormのインスタンスをUserControlコンストラクタに渡す場合、UserControlのグローバル変数にそのインスタンスを保存し、2つのUserControlを切り替える必要がある場合はそのインスタンスを使用します。 UserControl1.cs
public class UserControl1
{
MainForm _current;
public UserControl1(MainForm f)
{
InitializeComponent();
_current = f;
}
private void btnProceed_Click(object sender, EventArgs e)
{
.....
UserControl2 u2 = new UserControl2();
_current.panelMain.Controls.Add(u2);
u2.listView1.Items.Add(new ListViewItem(new[]{
name,
email,
phone,
color}));
}
}
で
MainForm.csで
(あなたが最初のユーザーコントロールを作成する)
UserControl1 uc = new UserControl1(this);
.....
これは正しく、他のタスクのために処理するために、問題になる可能性があります。メインフォームが必要なときにどのユーザーコントロールを表示するかを決定するために、アプリケーションを再設計することをお勧めします。
このアプローチでは、ユーザーがUserControl1をクリックしたときにイベントを使用してMainForm.csに通知されるので、これをMainFormで取得します。CS
UserAddedがクラスUserInfoArgs
public void UserAdded(UserControl1 sender, UserInfoArgs args)
{
sender.Hide();
UserControl2 u2 = new UserControl2();
this.panelMain.Controls.Add(u2);
u2.listView1.Items.Add(new ListViewItem(new[]{
args.name,
args.email,
args.phone,
args.color}));
}
しかし、新しいユーザーに関する情報を受け取ったのMainForm方法であるとのUserControl1にあなたは、イベントをデリゲートを追加したときにイベントを発生させる
UserControl1 uc = new UserControl1();
uc.UserClick += UserAdded;
.....
あなたの新しいユーザに関する情報をMainFormに伝える必要があります。
public class UserControl1
{
public delegate void onClick(UserControl1 sender, UserInfoArgs args);
public event onClick UserClick;
....
private void btnProceed_Click(object sender, EventArgs e)
{
UserInfoArgs args = new UserInfoArgs()
{
name = tbName.Text,
email = tbEmail.Text,
phone = tbPhone.Text,
color = tbColor.Text
};
if(UserClick != null)
UserClick(this, args);
}
public class UserInfoArgs
{
public string name {get;set;}
public string email {get;set;}
public string phone {get;set;}
public string color {get;set;}
}
あなたはMainFormをの新しいインスタンスを作成している、あなたはそのインスタンスに新しいユーザーコントロールを追加しますので。 _f1.Show(); _を追加すると表示されます。しかし、私は、あなたがMainFormの既存のインスタンスに新しいusercontrolを追加したいと思っています – Steve
@steveはい...どうすればMainFormの新しいインスタンスを作成せずにコントロールを追加できますか? – BiKe
最も簡単な方法では、現在のMainFormのインスタンスをUserControlコンストラクタに渡し、そのインスタンスをUserControlのグローバル変数に保存し、2つのusercontrolを切り替える必要があるときにそのインスタンスを使用します。これは、他のタスクを正しく処理するためには問題になります。メインフォームが必要なときにどのユーザーコントロールを表示するかを決定するために、アプリケーションを再設計することをお勧めします。 – Steve