1

重複した質問: 保護レベルが原因でプロパティにアクセスできません

上記の重複した質問のように、デリゲートとイベントを使用して、クラスからフォーム テキスト ボックスに文字列を送信したいと考えています。このトピック (デリゲートとイベント) は初めてなので、これを設定することはできません。これが私がやったことです:

class Converter
{
    public delegate void SendText( Converter c, EventArgs e);
    public event SendText RaiseEvent;

    public static void WatchFile()
    {
        // watcher is initialized (code is not show)  
        watcher.Changed += new FileSystemEventHandler(convert);
    }

    public static void convert(object source, FileSystemEventArgs f)
    {
        //do something then 
        if (RaiseEvent != null) 
        { 
            // Raise event and send text to controls 
        }
    }
}

次のエラー メッセージが表示されます。

非静的フィールド、メソッド、またはプロパティ 'Ansi_UTF_8_converter.Converter.RaiseEvent' にはオブジェクト参照が必要です

上記の方法が正しいかどうか教えてください。

4

3 に答える 3

3

関数の static をクラス メソッドに変更します。

public void convert(object source, FileSystemEventArgs f)
{
  //do something then 
  if (RaiseEvent != null) { ... }
}

またはイベント静的を変更します。

public static event SendText RaiseEvent;
于 2013-05-29T05:50:20.793 に答える
2

関数は静的ですが、エラー メッセージが示すように、イベントは静的ではありません。

多分これはあなたに役立ちますhttp://msdn.microsoft.com/en-us/library/79b3xss3(v=vs.80).aspx

ポイントは、関数がクラスのオブジェクトに対して機能しないことですが、機能しない関数内でクラスのオブジェクトを使用することです。

于 2013-05-29T05:48:18.480 に答える
0

この使用状況では、イベントは静的でなければなりません

public static event SendText RaiseEvent;
于 2013-05-29T05:50:20.030 に答える