Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#委托和事件将文本从课堂发送到表单_C#_.net_Winforms - Fatal编程技术网

c#委托和事件将文本从课堂发送到表单

c#委托和事件将文本从课堂发送到表单,c#,.net,winforms,C#,.net,Winforms,重复问题: 我想使用委托和事件将一个字符串从类发送到表单文本框,如上面重复的问题所示。由于我对该主题(代表和事件)不熟悉,因此无法进行设置。以下是我所做的: class Converter { public delegate void SendText( Converter c, EventArgs e); public event SendText RaiseEvent; public static void WatchFile() { //

重复问题:

我想使用委托和事件将一个字符串从类发送到表单文本框,如上面重复的问题所示。由于我对该主题(代表和事件)不熟悉,因此无法进行设置。以下是我所做的:

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\u UTF\u 8\u converter.converter.RaiseEvent”


你能告诉我上述方法是否正确吗

您的函数是静态的,但您的事件不是静态的,正如错误消息告诉您的那样

也许这对你有帮助


关键是你的函数对你的类的对象不起作用,但是你在你的函数中使用了你的类的对象,而这个对象不起作用。

你的函数是静态的,但是你的事件不是静态的,正如错误消息告诉你的那样

也许这对你有帮助


关键是你的函数对类的对象不起作用,但你在函数中使用了类的对象,而该对象不起作用。

在ussage的上下文中,你的事件应该是静态的

public static event SendText RaiseEvent;

在ussage的上下文中,您的事件应该是静态的

public static event SendText RaiseEvent;

将函数的静态值更改为类方法:

public void convert(object source, FileSystemEventArgs f)
{
  //do something then 
  if (RaiseEvent != null) { ... }
}
或将事件更改为静态:

public static event SendText RaiseEvent;

将函数的静态值更改为类方法:

public void convert(object source, FileSystemEventArgs f)
{
  //do something then 
  if (RaiseEvent != null) { ... }
}
或将事件更改为静态:

public static event SendText RaiseEvent;

为什么要投票?有什么原因吗?请不要为事件处理程序创建新的委托类型。改用
EventHandler
EventHandler
。@Dennis:你能演示一下吗。我很想知道这个technique@user726720:而不是
公共委托void SendText(转换器c、事件参数e);公共事件SendText RaiseEvent使用公共事件处理程序RaiseEvent。另外,请注意,指南建议将事件命名为某些已发生的操作(“更改”、“单击”、“检查”、“接收”等)。为什么要投票?有什么原因吗?请不要为事件处理程序创建新的委托类型。改用
EventHandler
EventHandler
。@Dennis:你能演示一下吗。我很想知道这个technique@user726720:而不是
公共委托void SendText(转换器c、事件参数e);公共事件SendText RaiseEvent使用公共事件处理程序RaiseEvent。另外,请注意,指南建议将事件命名为某些已发生的操作(“更改”、“单击”、“检查”、“接收”等)。