2017-05-17 20 views
-3

C#でウィンドウフォームを使用しています。ファイルを参照してファイルを開くときにファイルを開くときに、何度も 。ファイルを選択してもファイルを開くダイアログが表示され続ける#

ファイルを開くための私のコードをだ

private void OpenBtn_Click(object sender, EventArgs e) 
{ 
    // Create OpenFileDialog 
    OpenFileDialog dlg = new OpenFileDialog(); 

    // Set filter for file extension and default file extension 
    dlg.DefaultExt = ".xml"; 
    dlg.Filter = "XML Files (*.xml)|*.xml"; 

    // Display OpenFileDialog by calling ShowDialog method 
    DialogResult result = dlg.ShowDialog(); 
    if (result == DialogResult.OK) 
    { 
     pathtext.Text = dlg.FileName; 
     sourceName = dlg.FileName; 
    } 
    // destFile = resultFile.Name; 
    if (pathtext.Text != null) 
    { 
     createBtn.Enabled = true; 
    } 
} 

と、フォームのロード

OpenBtn.Click += new EventHandler(this.OpenBtn_Click); 

私は事を逃さなかったところ、私が見ることができない方法のこのイベントハンドラ。その後、I加えている場合 enter image description here

:私はそれはあなたがイベントのプロパティで見ることができる自動イベントハンドラを作成するようデザイナでボタンをダブルクリックしたときに、私はあなたのバグを再現することができます

+2

コードが不十分ですが、それではコードを開くことができません。 – user9993

+0

これは私がopenfiledialogを呼び出した唯一の場所で、ファイルと関係している可能性がありますか? – Code4Living

+0

はループのように聞こえる。このコードはループで囲まれていますか?またはメソッド内にあり、このメソッドを再帰的に呼び出すかどうかを判断します。 –

答えて

0

唯一の方法ですそれにコードの中Loadイベントの例のイベントClickの手動登録を追加:

private void Form1_Load(object sender, EventArgs e) 
{ 
    button2.Click += new EventHandler(this.OpenBtn_Click); 
} 

をそれから私は、ダイアログが二回ポップアップ表示動作を取得します。もう一度やり直してください:

private void Form1_Load(object sender, EventArgs e) 
{ 
    button2.Click += new EventHandler(this.OpenBtn_Click); 
    button2.Click += new EventHandler(this.OpenBtn_Click); 
} 

3回ポップアップします!このイベントをループに登録する可能性は非常に高いです。だから、最初のものが実行されると、他のすべてのものはただフォローアップされます。マニュアル登録行を削除し、単にイベントプロパティにイベントハンドラ名を入れてください。

編集:主な問題は、this answerで説明されているように、オペレータ+=がデリゲートを内部リストに追加することです。

+0

ありがとう@MongZhuあなたの答えが問題を解決しました(y) – Code4Living

+0

@asmaあなたは大歓迎です。お役に立てて嬉しいです。 –

+0

@asma主な問題は、演算子 '+ ='が[this answer](http://stackoverflow.com/a/3356424/5174469)で説明されているように内部リストにデリゲートを追加することです。 –

関連する問題