2017-11-04 4 views
0

フォームクラスの2クラス(1フォームクラス) にしたい、私は別のクラスvoidを呼び出します。それだけでメッセージボックスを表示別のクラスのオブジェクトC#

public static void OnCommand() 
    { 
     Form1 frm = new Form1(); 
     if (frm.code.Text.Contains("end") && frm.code.TextLength == 4) 
     { 
      if (MessageBox.Show("Close?", "Close window?", MessageBoxButtons.YesNo) == DialogResult.Yes) 
      { 
       frm.Close(); 
      } 
      else 
      { 
       frm.output.Text = (frm.output.Text + "\nClosing closed").ToString(); 
       frm.code.Clear(); 
      } 
     } 
     else 
     { 
      MessageBox.Show("test"); 
      frm.output.Text = (frm.output.Text + "\nI don't understand ... ").ToString(); 
      frm.code.Clear(); 
     } /**/ 

`private new void Enter(object sender, KeyPressEventArgs e) 
     { 
      if (e.KeyChar == Convert.ToChar(Keys.Enter)) 
      { 
       Commands.OnCommand();` 

他のクラス:私はこのHow to change a label from another class? c# windows forms visual studio と私のコードを見てそれは の作品と私は(2番目のクラスのスクリプトで)ラベルとテキストボックスとthigsを行いたい on end ....私はエラーがフォーム1に宣言していると思います

答えて

2

元のフォームへの参照を渡し、新しいインスタンスを作成しないでください:

private new void Enter(object sender, KeyPressEventArgs e) 
{ 
    if (e.KeyChar == Convert.ToChar(Keys.Enter)) 
    { 
     Commands.OnCommand(this); 



public static void OnCommand(Form1 frm) 
{ 
    if (frm.code.Text.Contains("end") && frm.code.TextLength == 4) 
    { 

つまり、フォーム全体への参照を他の方法に送信することは貧弱な慣行と考えられます。代わりに、メソッドが必要とする値(例:code.Text)だけを渡すように再構成し、Formが表示する必要がある値を返すようにしてください。

private new void Enter(object sender, KeyPressEventArgs e) 
{ 
    if (e.KeyChar == Convert.ToChar(Keys.Enter)) 
    { 
     string message = Commands.OnCommand(code.Text); 

     if (message == "") 
     { 
      Close(); 
     } 
     else 
     { 
      frm.output.Text = frm.output.Text + message; 
      frm.code.Clear(); 
     } 



public static void OnCommand(string code) 
{ 
    if (code.Contains("end") && code.Length == 4) 
    { 
     if (MessageBox.Show("Close?", "Close window?", MessageBoxButtons.YesNo) == DialogResult.Yes) 
      return ""; 
     else 
      return "Closing closed"; 
    } 
    else 
    { 
     MessageBox.Show("test"); 
     return "I don't understand ... "; 
    } 
+0

は、私は私のコードのバージョンを使用したいが、実行しない:)ありがとうございます。public static無効オンデマンド(のForm1 FRM)は..worked ...私はちょうどあなたのバージョンに見て、probobllyそれを使用します:D :) –

+0

あなたは大歓迎です。えー、それは単なる考えでした。 :) –

関連する問題