2017-08-30 58 views
3

(信息):我知道這已被問了好幾次,但恕我直言總是問題是,事件並沒有真正添加在調用函數,這不是這裏的情況。即使在調用函數中正確添加了事件,爲什麼我的事件始終爲空?

我有下面的類:

public class FilePanel : BasePanel 
{ 
    public event LinkClickedEventHandler FileOpen; 
    private PlaylistElement _element; 

    public FilePanel() : base() 
    { 
     AddControls(new PlaylistElement { Description = "lorem ipsom" }); 
    } 

    public FilePanel(PlaylistElement element) : base(element) 
    { 
     AddControls(element); 
    } 

    private void AddControls(PlaylistElement element) 
    { 
     _element = element; 
     ToolTip tt = new ToolTip(); 
     var textControl = new Label { Dock = DockStyle.Fill, Text = element.File.Title, Padding = new Padding(2, 2, 5, 2) }; 
     var linkControl = new LinkLabel { Dock = DockStyle.Right, TextAlign= System.Drawing.ContentAlignment.MiddleRight, Width = 200, Text = "Datei öffnen", Padding = new Padding(2, 2, 5, 2) }; 
     tt.SetToolTip(linkControl, element.File?.FileReference); 
     linkControl.Click += LinkControl_Click; 
     this.Controls.Add(textControl); 
     base.AddControls(element); 
     this.Controls.Add(linkControl); 

     this.Height = 50; 
    } 

    private void LinkControl_Click(object sender, EventArgs e) 
    { 
     FileOpen?.Invoke(this, new LinkClickedEventArgs(_element.File.FileReference)); 
    } 
} 

此類稱爲方式如下:

private void AddScheduleFile(RadCollapsiblePanel blockPanel, PlaylistElement element) 
{ 
    var panel = new ScheduleControls.FilePanel(element); 
    panel.FileOpen += Panel_FileOpen; 
    blockPanel.Controls.Add(new ScheduleControls.FilePanel(element)); 
} 

正如你所看到的,的FileOpen-事件被分配給調用的類。

但是,當我分成LinkControl_Click時,FileOpen仍爲NULL。

+0

「正如您所看到的,FileOpen事件被分配給調用類。」 - 是的,對於你創建的面板,然後什麼都不做... –

+0

你說得對。但Mong Zhu速度更快,Jon :) –

回答

3

看來你在錯誤的對象中引發事件。雖然您註冊了事件,但您可以爲panel對象進行註冊。但你添加一個全新的對象控件:

blockPanel.Controls.Add(new ScheduleControls.FilePanel(element)); 

,如果你現在使用這個對象來觸發事件,你會看到它是null因爲你沒有註冊它。爲什麼不將原始對象傳遞給控件?=! :

private void AddScheduleFile(RadCollapsiblePanel blockPanel, PlaylistElement element) 
{ 
    var panel = new ScheduleControls.FilePanel(element); 
    panel.FileOpen += Panel_FileOpen; 
    blockPanel.Controls.Add(panel); 
} 
相關問題