2017-07-26 36 views
-2

我想这样的,但它会返回空值,:如何在没有委托的情况下在c#中创建事件?

public event EventHandler<EventArgs> myevent; 


public void Btn_Click(object sender, EventArgs e) 
{ 

    if (myevent!= null) //Here I get null value. 
     myevent(null, new EventArgs()); 
} 

如何实现的情况下火?

编辑:

我具有其中包含按钮事件,该方法ButtonClick我建立这个事件内该用户控制一个UserControl

我有一个Form。在这种形式中我使用这个UserControl。所以我需要从用户控件按钮单击事件触发一个事件来形成页面特定的功能。

+3

因为没有人在您的活动中注册 – Rahul

+2

您尚未向您的活动注册任何处理程序方法,因此在您提出活动时您希望运行什么? https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/events/how-to-subscribe-to-and-unsubscribe-from-events –

+0

以下链接对您有帮助问题: [有或没有代表的事件](https://stackoverflow.com/questions/1334736/events-with-and-without-delegates-in-asp-net) – Viswa

回答

0

我为你写了一个非常简单的基本解决方案。请阅读代码中的注释以了解解决方案。如果有什么不清楚的地方,请提问。

下面的示例,将导致事件,火灾,如果人的名称更改:

这里是Person对象:

public class Person 
{ 
    //Event to register to, when you want to capture name changed of person 
    public event EventHandler<NameChangedEventArgs> nameChangedEvent; 

    //Property 
    private string _name; 
    public string Name 
    { 
     get { return _name; } 
     set 
     { 
      this._name = value; 
      //Call the event. This will trigger the OnNameChangedEvent_Handler 
      OnNameChangedEvent_Handler(new NameChangedEventArgs() {NewName = value}); 
     } 
    } 

    private void OnNameChangedEvent_Handler(NameChangedEventArgs args) 
    { 
     //Check if event is null, if not, invoke it. 
     nameChangedEvent?.Invoke(this, args); 
    } 
} 

//Custom event arguments class. This is the argument type passed to your handler, that will contain the new values/changed values 
public class NameChangedEventArgs : EventArgs 
{ 
    public string NewName { get; set; } 
} 

下面是一个实例,并使用Person对象的代码:

class Program 
{ 

    static void Main(string[] args) 
    { 
     //Instantiate person object 
     var person = new Person(); 
     //Give it a default name 
     person.Name = "Andrew"; 

     //Register to the nameChangedEvent, and tell it what to do if the person's name changes 
     person.nameChangedEvent += (sender, nameChangedArgs) => 
     { 
      Console.WriteLine(nameChangedArgs.NewName); 
     }; 

     //This will trigger the nameChanged event. 
     person.Name = "NewAndrewName"; 

     Console.ReadKey(); 


    } 
} 
+0

谢谢,我试过了,但是事件没有开火 – user8331467

+0

用上面的代码?事件确实发生了... –

+0

我试过这个概念给我的代码,但是事件没有发生火灾 – user8331467

0

能不能请你调用事件的以下方式:

public event EventHandler myevent; 
myevent += new EventHandler(Button1_Click); 

     if (myevent != null) //Here I get null value. 
      myevent(1, new EventArgs()); 
相关问题