2017-02-22 2 views
0

1つのフォームと2つの.csファイルを作成しました。イベント委任モデルの下のコードでエラーが発生しています

第一のファイルはForm1.cs:

namespace WindowsFormsApplication4 
{ 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 
    private Class1 _enemy; 

    private void button1_Click(object sender, EventArgs e) 
    { 
     _enemy = new Class1(this); 
     _enemy.LoopInteration += OnLoopInteration; 
     _enemy.MyMethod(); 
     _enemy.LoopInteration -= OnLoopInteration; 
    } 
    private void OnLoopInteration(object sender, LoopCounterArgs e) 
    { 
     textBox1.Text = Convert.ToString(e.Iteration); 
    } 
} 
} 

第二のファイルのClass1.cs:

namespace WindowsFormsApplication4 
{ 
public class LoopCounterArgs : EventArgs 
{ 
    public int Iteration { get; set; } 

    public LoopCounterArgs(int iteration) 
    { 
     Iteration = iteration; 
    } 
} 
public class Class1 
{ 
    public event EventHandler<LoopCounterArgs> LoopInteration; 
    public Class1(Form1 form) 
    { 
     _form1 = form; 
    } 
    public void MyMethod() 
    { 
     for (int j = 1; j <= 20; j++) 
     { 
      LoopInteration?.Invoke(this, new LoopCounterArgs(j)); 
      //Thread.Sleep(100); 
     } 
    } 
    private Form1 _form1; 
} 

} 

し、Form1のフォームデザイン:

Form1 Design

今取得しています次のエラーが表示されます。

*エラー1:

無効な表現用語 '。' C:プロジェクト\ WindowsFormsApplication4 \ WindowsFormsApplication4 \ Class1.csの29 32 WindowsFormsApplication4

エラー2 \ Visual Studioの 2013 \ 43060の\ドキュメント\ \ユーザー:

構文エラーは、 ':' Cを期待しました:プロジェクト\ WindowsFormsApplication4 \ WindowsFormsApplication4 \ Class1.csの29 33 WindowsFormsApplication4 \ Visual Studioの 2013 \ 43060の\ドキュメント\ \ユーザー*私が欲しいもの

は、そのユーザーのクリックでフォーム1のforループはclass1.csで実行され、結果はform1テキストボックスに表示されます。 厳密にEvent + Delegationモデルを使用します。

+0

なぜ、あなたの 'Class1'がフォームを使用しないときにフォームへの参照を持っているのかは分かりませんが、どのラインに問題があるのか​​私たちには示されていません。 'using'ディレクティブを指定しなかったので、エラーメッセージの行番号をソースコード内の行にマップすることはできません。 –

+0

しかし、それ以外の' class1.cs'は私のためにコンパイルします。何か間違っていることを示唆している。実際にはVisual Studio 2013を使用していますか?もしそうなら、あなたはnull条件演算子を使うことはできません...私はVS2015にアップグレードすることをお勧めします。 –

+0

@JonSkeetはこの行にエラーを表示します LoopInteration?.Invoke(this、new LoopCounterArgs(j)); には構文エラーがあります。 私はVS 2012 –

答えて

0

"?"を削除する必要があります。

LoopInteration.Invoke(this, new LoopCounterArgs(j)); 
+2

イベントに何も加入しないと、例外がスローされます。 OPはそれを明示的に処理するか、またはC#6コンパイラを更新してC#6機能を使用できるようにする必要があります。 –