2012-02-03 11 views
4

よく通常私はガイダンスなしで問題を発見し研究するのにはかなり良いですが、私は問題を抱えています。私は見たすべてのものが私が必要とするものとは関係がない、C#(これまでにない)で「イベント」を作成しようとしています。イベント処理(フォームを隠しているときに検出)

私はform2が隠されているときに私のメインフォームでクラスを呼び出そうとしています。私はform2が閉じられたかどうかをチェックするはずだったコードを見つけました - それを私のコードに適切に組み込んでいないか、閉じているのが隠れていないかのどちらかです。

だから、私はこのようなプログラムを介して実行したい明確にする:

  • Form1が設定は
  • を変更することができる場所のForm2
  • のForm2が開き開きForm1のボタンを設定
  • クリックして実行しますForm2の "OK"ボタンをクリックします(Form2が隠されていることをForm1に知らせる)。
  • フォーム1を非表示にし、ボタン名とURLをリフレッシュするクラスRefreshを実行する

答えて

2

オープン2番目の形式は、結果とリフレッシュをご確認ください:フォームのDialogResultを設定し、フォームを閉じるときに、この場合にも行う必要がある何

if (result == DialogResult.OK) 
    Refresh(); 

があり、たとえば、OKボタンがある場合は、ボタンハンドラのセット:

this.DialogResult = DialogResult.OK; 

これは自動です私は正しく覚えているだけでなく、フォームを数学的に閉じます。

必要な場合は、キャンセルボタンでDialogResult.Cancelを設定することもできます。

+0

それは「ShowModal」は、参照を望んでいた見つけることができませんでした。私はそれをShowDialogに変更しました。それはうまくいきましたが、[OK]をクリックすると「リフレッシュ」は参照されませんでした。 「結果」はどこに置くのですか?私はそれをForm1の "ショー"の下に置いた。 – Marshal

+0

ええと、はい、タイプミスのため申し訳ありませんが、それはShowDialogの(ある) –

+0

にも編集をチェック –

1

ShowDialog()を使用してForm2をモーダルダイアログとして開いてみませんか? Form2がOKまたはCancelで閉じられ、呼び出しが返された後にForm1に応じて動作する場合、その方法で値を返すことがあります。モーダル

Form2 form2 = new Form2(); 
DialogResult result = form2.ShowDialog(); 

として

1

私が正しく理解していれば、Form1とForm2の両方がアクセスできる設定情報を格納したクラスが必要です。のは、そのクラスForm1Settings呼び出し、などを実装してみましょう:リフレッシュ方法の必要性を取り除く、簡単にするために

public static class Form1Settings 
{ 
    public static string ButtonText; 
    public static string Uri; 
} 

は、私はこのクラスとそのプロパティは、静的作られ、その両方Form1Form2はそれに直接アクセスすることができます。

Form1は、ブロック方法でForm2を呼び出し、OKボタンがクリックされた場合にのみ表示を更新します。

public partial class Form1 : Form 
{ 
    private Form2 form2 = new Form2(); 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void buttonSettings_Click(object sender, EventArgs e) 
    { 
     if (form2.ShowDialog() == DialogResult.OK) 
     { 
      this.button1.Text = Form1Settings.ButtonText; 
      this.textBoxUrl.Text = Form1Settings.Uri; 
      this.Update(); 
     } 
    } 
} 

そして最後に、Form2のは、ユーザからの入力で設定値を更新します:あなたはForm2の

private Form2_VisibleChanged(object sender, EventArgs e) 
{ 
    if (!this.Visible) { Refresh(); } 
} 

VisibleChangedイベントを使用することができます

public partial class Form2 : Form 
{ 
    public Form2() 
    { 
     InitializeComponent(); 
    } 

    private void buttonOK_Click(object sender, EventArgs e) 
    { 
     Form1Settings.ButtonText = this.textBoxButton.Text; 
     Form1Settings.Uri = this.textBoxUri.Text; 

     this.DialogResult = DialogResult.OK; 
     this.Hide(); 
    } 
} 
2

また、 これはもっとあるかもしれませんエレガントな...

関連する問題