2013-02-18 3 views
1

У меня есть 2 формы.Делегат и событие

Form1:

public partial class Panel1 
    { 
     public void ShowExport(object sender, EventArgs e) 
     { 
      ....... 
     } 
    } 

Form2:

public partial class Panel2 
{ 
     public delegate void ShowExportReport(object sender, EventArgs e); 
     public event ShowExportReport ShowExportClicked; 

private void buttonExport_Click(object sender, RoutedEventArgs e) 
     {   
      if (ShowExportClicked != null) 
      { 
       ShowExportClicked(sender, new EventArgs()); 
      }      

     } 
} 

При нажатии кнопки -

button.Click = buttonExport_Click 

Как я могу назвать Panel1.ShowExport() от panel2 .но tonExport_Click?

+0

Я хочу заметить, что ваше мероприятие не является ниспадающим. Скопируйте событие в локальную переменную, затем проверьте значение null, затем вызовите. –

ответ

2

В Panel1 вы должны подписаться на событие:

pnl2.ShowExportClicked += new ShowExportReport(ShowExport); 
2

Вы должны назначить обработчик для события ShowExportClicked панели 1 класса на объект класса Panel 2.

 public partial class Panel1 
     { 
      Panel2 pnl2; 
      public Panel1() 
      { 
       pnl2 = new Panel2(); 
       pnl2.ShowExportClicked += new ShowExportReport(ShowExport);  
      } 

      public void ShowExport(object sender, EventArgs e) 
      { 
       ....... 
      } 
     } 
+0

Я не хочу этого: pnl2.Show(); – Zhenia

+1

Вы не можете этого сделать! Вы должны быть в методе или в конструкторе для привязки событий к обработчикам событий. –

+2

Процедурный код не может быть на 1-м уровне класса, возможно, вы хотели поместить его в constrctor. –

0

Создать свое мероприятие на Form1. и прослушать событие в Form2.

Form1:

public event EventHandler ShowExportChanged; 

private void ShowExportChanged() 
{ 
    var handler = ShowExportChanged; 
    if(handler == null) 
     return; 

    handler(this, EventArgs.Empty); 
} 

public void ShowExport(object sender, EventArgs e) 
{ 
    ShowExportChanged(); 
} 

Form2:

pnl1.ShowExportChanged+= new OnShowExportChanged(ShowExportChanged); 
0

Как я могу позвонить Panel1.ShowExport() из Panel2.buttonExport_Click?

Передача (только необходимая информация) из формы1 при создании экземпляра формы2.

Form1.cs:

void ShowForm2_Click() 
{ 
    var form2 = new Form2(); 
    form2.ShowExportClicked += ShowExport; 
    form2.Show(); 
} 

Теперь из Form2 вы можете просто позвонить ShowExport по нажатию кнопки.