2011-02-26 29 views
0

我想在MyControl中允許更改AllowDrop的時間創建事件。C#中MyControl的簡單事件

在MyControl:

public event EventHandler AllowDropChanged; 

private void MyControl_Load(object sender, EventArgs e) 
{ 
    AllowDropChanged +=new EventHandler(MyControl_AllowDropChanged); 
} 
private void MyControl_AllowDropChanged(object sender, EventArgs e) 
{ 

     MessageBox.Show("Dropping Changed"); 

} 

怎麼能我提出我的事件?

+0

我再告訴你一次......停止在你的問題面前放置'Everlasting'。我們是一個問答網站,即使是'嗨'和'謝謝'已經被視爲不必要的混亂。並學習如何使用標記,謝謝。 – Bobby 2011-03-07 10:39:19

回答

1

你很幸運,AllowDrop是一個虛擬屬性。這使得提升事件變得非常容易,只需覆蓋屬性並在引用者中引發事件即可。樣板代碼如下所示:

using System; 
using System.Windows.Forms; 

class MyControl : Control { 

    public event EventHandler AllowDropChanged; 

    protected void OnAllowDropChanged(EventArgs e) { 
     var handler = AllowDropChanged; 
     if (handler != null) handler(this, e); 
    } 

    public override bool AllowDrop { 
     get { return base.AllowDrop; } 
     set { 
      if (value != base.AllowDrop) { 
       base.AllowDrop = value; 
       OnAllowDropChanged(EventArgs.Empty); 
      } 
     } 
    } 
} 
0

活動可以稱得上就像一個功能,但你應該習慣檢查它是否是空第一(它檢查是否有必然的任何處理程序):

if (AllowDropChanged != null) AllowDropChanged(this, new EventArgs()); 

你還沒有在你的問題中指定事件是什麼或來自哪裏,所以真的沒有更多的信息可以提供。只要將該線路放在任何想要發起事件的地方。

1
if (AllowDropChanged != null) 
{ 
    AllowDropChanged(this, new EventArgs()); 
} 
1

您不想在控件的代碼中添加事件處理程序。應該在代碼中使用您的控件進行處理。所以,你會有這樣的東西

AllowDropChanged + = new EventHandler(MyControl_AllowDropChanged);

public event EventHandler AllowDropChanged; 


    private void OnAllowDropChanged() 
    { 
     if(AllowDropChanged!=null) 
     { 
      AllowDropChanged(this,new EventArgs()); 
     } 
    } 
+0

我應該檢查條件:AllowDrop ==!AllowDrop來引發這個事件。哪裏是檢查這個地方。 – 2011-02-26 16:49:14