Подписка на событие при создании объекта в C#
В C# (.NET 4.5) я хотел бы подписаться на событие во время создания объекта.
конечно, сработало бы следующее:
CheckBox c = new CheckBox();
c.Name = "TheCheckBox";
c.Checked += c_Checked;
но хотите узнать, можно ли сделать что-то вроде:
CheckBox c = new CheckBox() {
Name = "TheCheckBox",
Checked += c_Checked
}
редактирование после обсуждения: это для того, чтобы выполнить что-то вроде:
MyUniformGrid.Add(new CheckBox() {
Name = "TheCheckBox",
Checked += CheckHandler
});
2 ответов
нет, к сожалению, подписка на события не поддерживается в инициализаторах объектов. Это сделает его действительно просто создать GUIs в некоторых случаях, но нет...
дом на полпути:
Checkbox c = new CheckBox { Name = "TheCheckBox" };
c.Checked += c_Checked;
(в идеале переименования c_Checked
к имени, которое на самом деле имеет смысл - я ненавижу VS-сгенерированные имена здесь...)
Если у вас есть контроль над элементами управления, вы всегда можете настроить eventhandler в конструкторе. Что-то вроде:
public class Program
{
private static void Main(string[] args)
{
Checkbox checkbox = new Checkbox(OnChecked);
checkbox.TriggerChecked();
}
private static void OnChecked(object sender, EventArgs args)
{
Console.WriteLine("triggered event");
}
}
public class Checkbox
{
public event EventHandler<EventArgs> Checked;
public Checkbox(EventHandler<EventArgs> eventHandler)
{
Checked += eventHandler;
}
public void TriggerChecked()
{
var handler = Checked;
if (handler != null)
handler(this, new EventArgs());
}
}