Вопрос по событиям.
От: Аноним  
Дата: 08.09.06 15:07
Оценка:
Здравствуйте.

Есть класс:

public class ExampleClass
{
public delegate void SomeHandler(string message);
public event SomeHandler SomeEvent;

public void Method()
{
SomeEvent("Hello world!");
}
}

Если делать вызов так:
private void button1_Click(object sender, System.EventArgs e)
{
ExampleClass cl = new ExampleClass();
cl.SomeEvent += new Application1.ExampleClass.SomeHandler(cl_SomeEvent);
cl.Method();
}
private void cl_SomeEvent(string message)
{
MessageBox.Show(message);
}

То ошибок нет.

А если так:
private void button1_Click(object sender, System.EventArgs e)
{
ExampleClass cl = new ExampleClass();
cl.Method();
}

То при генерации события вылетит эксепшн:
An unhandled exception of type 'System.NullReferenceException' occurred.
Additional information: Object reference not set to an instance of an object.

Как это обойти, когда на форму кидаешь кнопку, обработчик события ведь можно и не делать, а здесь?


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Вопрос по событиям.
От: Аноним  
Дата: 08.09.06 17:28
Оценка:
Если я не ошибаюсь, то ты пытаешься из класса ExampleClass
при вызове в нем Method() породить в классе где создан экземпляр ExampleClass'а (форма) некоторое событие (передать строку из ExampleClass) не назначив при этом приёмника этого события в родителе. Поэтому при попытке отправить сообщение неизвестному адресату и возникает ошибка 'System.NullReferenceException'.

Можешь написать, если речь идет о показе сообщения , так:
[c#]public class ExampleClass
{
 public void Method(string message)
 {
 MessageBox.Show(message);
}
}[/c#]
---
PS: Сначала подумай, затем напиши!


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Вопрос по событиям.
От: Niemand Австралия  
Дата: 11.09.06 12:13
Оценка:
A>То при генерации события вылетит эксепшн:
A>An unhandled exception of type 'System.NullReferenceException' occurred.
A>Additional information: Object reference not set to an instance of an object.

для того, чтобы такого не было пиши проверку, есть ли получатель сообщения:

public void Method()
{
if (SomeEvent!=null)
SomeEvent("Hello world!");
}
If the message above is in English — means I'm wasting my work time and work computer to post here. No hard feelings
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.