2015-01-10 5 views
-1

У меня возникла проблема с подпиской на форму в событии в пользовательском элементе управления.Не удается получить доступ к событию в

MainForm-код:

public partial class mainForm : Form 
{ 
    public mainForm() 
    { 
     InitializeComponent(); 
     UserControl menuView = new mnlib.mnlibControl(); 
     newWindow(menuView); 
    } 

    public void newWindow(UserControl control) 
    { 
     this.mainPanel.Controls.Clear(); 
     this.mainPanel.Controls.Add(control); 
    } 

    mnlibControl.OnLearnClick += new EventHandler(ButtonClick); //Error in this line 

    protected void ButtonClick(object sender, EventArgs e) 
    { 
     //handling.. 
    } 
} 

UserControl-код:

public partial class mnlibControl : UserControl 
{ 
    public mnlibControl() 
    { 
     InitializeComponent(); 
    } 

    private void btn_beenden_Click(object sender, EventArgs e) 
    { 
     Application.Exit(); 
    } 

    public event EventHandler LearnClick; 
    private void btn_lernen_Click(object sender, EventArgs e) 
    { 
     if (this.LearnClick != null) 
      this.LearnClick(this, e); 
    } 
} 

Теперь, визуальная студия отмечает "mnlibControl.OnLearnClick ..." линии, как неправильно. «mnlibControl» не будет найден, возможно, отсутствует директива и т. д. Весь этот код и обе формы находятся в одном файле проекта. Я пробовал и искал, как ад, но просто не могу найти решение проблемы.

В форме UserControl есть кнопка - когда она является кликом, она запускает метод newWindow в mainForm и открывает другое окно.

Мой источник для этого решения моей проблемы: How do I make an Event in the Usercontrol and Have it Handeled in the Main Form?

ответ

2

Там нет в компоненте нет OnLearnClick. Вам необходимо подписаться на LearnClick. Вам также необходимо подписаться в функциональном блоке. Вы также должны использовать конкретный тип (mnlib.mnlibControl), а не UserControl:

public mainForm() 
{ 
    InitializeComponent(); 
    mnlib.mnlibControl menuView = new mnlib.mnlibControl(); 
    menuView.LearnClick += new EventHandler(ButtonClick); 
    newWindow(menuView); 
} 
+0

С точно этот код не работает, пока «LearnClick» в строке 5. Он говорит, что будет не будет определения для LearnClick. – dncrft

+0

@dncrft Вам нужно использовать 'mnlib.mnlibControl' вместо' UserControl'. См. Обновленный ответ для получения более подробной информации. – dotnetom

+0

Наконец, это работает! Спасибо! Не знаю, почему я использовал UserControl вместо mnlib.mnlibControl .. вроде глупо;) – dncrft

2

Ваш код mnlibControl.OnLearnClick += new EventHandler(ButtonClick); должен быть в пределах любого функционального блока (то есть метод, свойство, ...).

+0

Также в этом случае, когда я помещаю код в скобки mainForm, он говорит, что в Mnlib.mnlibControl не будет определения для OnLearnClick. Если я изменяю «OnLearnClick» на «LearnClick», он говорит, мне нужна ссылка на объект для «mnlib.mnlibControl.LearnClick» – dncrft

1

Вы должны поместить эту строку внутри фактического метода:

mnlibControl.LearnClick += new EventHandler(ButtonClick); 

Как это:

public mainForm() 
{ 
    InitializeComponent(); 
    UserControl menuView = new mnlib.mnlibControl(); 
    newWindow(menuView); 
    mnlibControl.OnLearnClick += new EventHandler(ButtonClick); 
} 
+0

Таким образом, он говорит мне: mnlibControl не будет в реальном контексте:/ – dncrft

+0

@dncrft 'mnlibControl' is имя класса. Вы должны использовать экземпляр. Я имею в виду, какой идентификатор вашего пользовательского элемента управления в форме? – dario

Смежные вопросы