2011-01-15 28 views

答えて

2

Form1のイベントハンドラをpublicにして、そのForm1.button_clickハンドラを直接呼び出します。ハンドラでそれらを使用しない場合は、ダミーのパラメータ(this、null)を与えることができます。

デザインの再考を検討してください。せいぜい、イベントハンドラは、実際には「何かをしている」別のレイヤの一部の関数を呼び出す必要があります。その機能は、form1から、form2から、またはどこからでも利用できます。

+3

さらに、「public」または「friend」のボタンコントロールをアクセス可能にし、['PerformClick'メソッド(http://msdn.microsoft.com/en-us/library/system) .windows.forms.button.performclick.aspx)。イベントハンドラメソッドを直接呼び出すよりもわずかに優れています。 +1は "あなたのデザインを再考する"。 –

+0

、あなたの+1はPerformClickです。まだそれを知らなかった。 – user492238

+0

これは 'IButtonControl'インターフェース(明らかに、' Button'コントロールが実装しています)によって提供されています。他のほとんどのコントロールやその他のイベントでは存在しませんが、ボタンのClickイベントハンドラを呼び出すことは他の場合よりもはるかに一般的です。 –

0

なぜフォーム1のボタンをクリックしますか?あなたはこのアプローチを考えましたか?


Class form 1 
{ 

    button click() 
    { 
    using (form2 = new form 2) 
    { 
     if (form2.showdialog()==dialogresult.OK) 
     { 
      data odata = form2.Data; 

      //do work 
     } 
    } 
    } 
} 


Class form2 
{ 

public property Data 
{ 
    get; 
} 

    button click() 
    { 
    if (form valid) 
     { 
     this.dialogresult = dialogresult.ok; 
     } 
     else 
     { 
     this.dialogresult = dialogresult.cancel; 
     } 
     this.close(); 
    } 
} 
+0

私はこれが何を意味するのかも知りません。明らかにそれはコンパイルされませんが、私はそれが何を示しているのかも分かりません。 'Data'プロパティの設定者はボタンの' Click'イベントハンドラメソッドを呼び出しますか?それはちょうど間違っているので。 –

+0

データを取得したり仕事をしたりするために2番目のフォームを開いていると仮定していました。フォーム1のデータを使用しますか?あなたは本当にあなたがその質問でやっていたことを言っていなかったので、その解釈にはオープンです!フォーム1が受注入力画面で、フォーム2が新しい顧客フォームである場合は、上記の例を使用します。ボタンをクリックするとフォーム1が新規顧客を入力し、フォーム2は顧客の詳細を取り、レコードを作成し、データプロパティは保存された顧客です。フォーム2が保存され、取り消されなかった場合(ダイアログの結果をOKに設定した場合)、フォーム1では、受注の顧客をデータプロパティに設定できます – WraithNath

関連する問題