【问题标题】:c# Delegates and events to send text from class to formc# 委托和事件将文本从类发送到表单
【发布时间】:2013-05-29 05:44:30
【问题描述】:

重复问题: Property is inaccessible due to its protection level

我想使用委托和事件将字符串从类发送到表单文本框,如上面的重复问题中所示。由于我是这个主题(代表和活动)的新手,所以我无法进行设置。这是我所做的:

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'

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

【问题讨论】:

  • 为什么要投票?有什么原因吗?
  • 请不要为事件处理程序创建新的委托类型。请改用EventHandlerEventHandler<TEventArgs>
  • @Dennis:你能证明一下吗?我很想学习这项技术
  • @user726720: 使用 public event EventHandler RaiseEvent; 代替 public delegate void SendText( Converter c, EventArgs e); public event SendText RaiseEvent;。另外,请注意,指南建议将事件命名为某些发生的操作(“已更改”、“已单击”、“已检查”、“已接收”等)。 msdn.microsoft.com/en-us/library/w369ty8x.aspx

标签: c# .net winforms


【解决方案1】:

把函数的静态改成类方法:

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

或更改事件静态:

public static event SendText RaiseEvent;

【讨论】:

    【解决方案2】:

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

    也许这对你有帮助http://msdn.microsoft.com/en-us/library/79b3xss3(v=vs.80).aspx

    关键是您的函数不适用于您的类的对象,但您在函数中使用了您的类的对象,这不起作用。

    【讨论】:

      【解决方案3】:

      您的事件在这种用法的上下文中应该是静态的

      public static event SendText RaiseEvent;
      

      【讨论】:

        猜你喜欢
        • 2018-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多