2016-10-16 6 views
-1

以前は動作していましたが、現在動作していない理由は何ですか?Easy Delegate veイベントの問題

例では2つのフォームを持っています。フォーム1は1つのボタンフォーム2を持っています。プログラムを開始しボタンをクリックすると1つのテキストボックスがあります。エラーは、私が

private void button1_Click(object sender, EventArgs e) 
{ 
    Form2 f = new Form2(); 
    f.ShowDialog(); 
    kapat("deneme"); 
} 

が、まだ動作していないように、異なる種類を試してみた

public partial class Form1 : Form 
{ 
    public delegate void kapatici(string al); 
    public static event kapatici kapat; 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     kapat("deneme"); 
     Form2 f = new Form2(); 
     f.ShowDialog(); 
    } 
} 

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

    private void Form2_Load(object sender, EventArgs e) 
    { 
     Form1.kapat += Form1_kapat; 
    } 

    private void Form1_kapat(string al) 
    { 
     textBox1.Text = al; 
     //throw new NotImplementedException(); 
    } 
} 

"System.NullReferenceExceptionが発生しました" です。 あなたの答えに感謝します。

+0

私たちは、スタック上のタイトルに「解決」を追加しない最も簡単な方法は次のように第2の形態のコンストラクタthrought文字列を渡すことですオーバーフロー。実際に問題を解決した場合は、質問に_answer_を投稿し、その回答の「受け入れる」ボタンをクリックしてください。 –

+0

以前に尋ねられ、以前に回答された質問にもお答えしません。マークされた重複した記事の広範なアドバイスに従った後でも、問題を解決できず、問題を診断するために既に行ったことを説明する新しい質問を投稿し、単にコードがスローする'NullReferenceException'です。 –

+0

こんにちはピーター、実際に私はその質問を書いた前にリンクされた主題を見ました。しかし私は私のために右の孤独を見つけることができませんでした。申し訳ありませんが、私のエントリが重複している場合。 2番目のポイントは、私は誰も検索の答えを操作したくない答えを試していないので、受け入れボタンをクリックしていません。 3点目は、私の質問に答える前に、別の方法で孤独を発見したことです。問題はアルゴリズムです。新しいフォームを開く際のデリゲートスタックと私はフォーム間のデリゲートポジションを変更し、それが動作します。私はこれが最高の孤独ではないことを知っていますが、その仕事と私はここで書くことができませんでした。これは専門家の孤独ではないからです。ありがとうございました。 – iekara

答えて

0

コードで達成したいことはわかりませんが、これは最小限の例だと思います。したがって、ここに解決策があります。

イベントは、執行されるまで無効です。

kapat?.Invoke("deneme"); 

第二に間違いが2番目のフォームを表示することです:

if (kapat =! null) 
{ 
    kapat.Invoke("deneme"); 
} 

これを行うためのコンパクトな方法がヌル演算子を使用することです:あなたは、あなたがそれを起動しようとしている前にイベントをチェックする必要がこれは、ダイアログが閉じられるまでメソッドをブロックしているためです。あなたのクリックメソッドは次のようになります場合は、それが動作します:

private void button1_Click(object sender, EventArgs e) 
{ 
    Form2 f = new Form2(); 
    f.Show(); 
    kapat?.Invoke("deneme"); 
} 

をあなたは、あなたの第二の形式のテキストを表示したい場合は、イベントを使用しないでください。今、あなたがフォームを開くことができ

public Form2(string al) 
{ 
    InitializeComponent(); 
    textBox1.Text = al; 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    Form2 f = new Form2("deneme"); 
    f.ShowDialog(); 
} 
+0

ありがとうございます。試してみます。 – iekara