2016-11-30 7 views
0

私は2つのフォーム、ログイン、メインは、メインフォームが最初に無効化されている(groupBoxが無効になっている)、これは、ユーザーがログインしようとしたときに実行されるコードです:プロパティ設定ツールのコントロールプロパティを変更できません。

private async void btnLogin_Click(object sender, System.EventArgs e) 
     { 
      if (await VerifyUserNamePassword(txtUsername.Text, txtPassword.Text)) 
      { 
       Frm_Main main = new Frm_Main(); 
       main.Auth = true; 
       Close(); 
      } 
      else 
       MessageBox.Show("Wrong username or password."); 
     } 

をし、これがでAuthプロパティですメインフォーム:

私はデバッガを実行しますが、すべての行を通過しますが、プロパティを変更するはずですが、そうではありません。ログインフォームがメインフォームを閉じた後も、それは無効になっていますか? 私は何が欠けていますか?

+0

1時間前に同じ問題が発生しました.... http://stackoverflow.com/questions/40889810/listview-not-updating-when-method-is-called-from-another -instance/40890039#40890039 – Steve

+4

他の人に言ったように。あなたのコードは、メインフォームの新しいインスタンスを作成します。あなたはそのインスタンスのプロパティを呼び出し、そのインスタンスの要素を既に表示されているものではなく使用します。 – Steve

+0

したがって、私は 'static'にする必要がありますか? – Mohamed

答えて

1

あなたのログインフォームにmain.Authを設定するのは貧弱なデザインだと思います。

次のように私はより適切だと思う方法は、次のとおりです。loginFormで

  1. は、プライベートブールisLoginValidを持っています。 IsLoginValidのプロパティを作成します。 ifステートメントでは、IsLoginValidプロパティをtrueに設定します。あなたはログインフォームを処理した後ので、あなたがあなたのメインフォームmain.Auth = Login.IsLoginValid

理由の中に割り当てるあなたはおそらくlogin.ShowDialog()の線に沿って何かをしたメインフォームでFrm_Main main = new Frm_Main();

  • に行を削除しますこれは、ログインフォームとメインフォームのロジックを分離することが望ましい方法です。カプセル化と疎結合のアプリケーションについてお読みください

  • +0

    ありがとう、これはさらに良いです – Mohamed

    関連する問題