以前 Qt を使って書いたときはシグナルとスロットを使って実装していましたが、C# を使う場合も同様のものがあるはずです。
おそらく達成できたのは、親ウィンドウ内に 2 つの新しい子ウィンドウを作成したことです。両方の子ウィンドウは処理されたデータを親ウィンドウに渡すことができ、2 つの子ウィンドウは親ウィンドウを介して通信します。
上記のウィンドウ名に沿ってコードを説明していきます。
アカウントとパスワードのログインウィンドウ
public delegate void SendToken(string token);
public event SendToken sendToken;
private void btnLogin_Click(object sender, EventArgs e)
{
....
sendToken(token);
}
親ウィンドウ
public delegate void SendMerchantFormToken(string msg); // 定义转发消息的委托
public event SendMerchantFormToken sendMerchantFormToken; // 定义事件
public MerchantForm merchantForm;
public LoginForm loginForm;
//打开登录界面
void openNewForm()
{
loginForm = new LoginForm();
loginForm.BringToFront();
loginForm.MaximizeBox = false;//最大化
loginForm.Text = "账号密码登录";
loginForm.sendToken += new LoginForm.SendToken(receiveloginFormToken); // 订阅子窗体1的send事件
loginForm.TopMost = true;//置于顶层
loginForm.StartPosition = FormStartPosition.CenterScreen;
loginForm.Show();
merchantForm = new MerchantForm();
merchantForm.BringToFront();
merchantForm.MaximizeBox = false;//最大化
merchantForm.Text = "商户选择";
merchantForm.TopMost = true;//置于顶层
merchantForm.StartPosition = FormStartPosition.CenterScreen;
merchantForm.Hide();
sendMerchantFormToken += new SendMerchantFormToken(merchantForm.getForm1Token);
}
//是委托代理的方法,也就是要最终执行的方法,需要定义并实现
private void receiveloginFormToken(string msg)
{
sendMerchantFormToken(msg);
merchantForm.Show();
}
加盟店リストウィンドウ
public void getForm1Token(string str)
{
MessageBox.Show(str);
}