Я хочу добавить оператор журнала для каждого нажатия кнопки WinForms, которое нажимает пользователь, и, в идеале, идентификатор родительской формы (например, строка заголовка). Я видел сообщения, регистрирующие все щелчки мышью, но меня интересует только регистрация нажатий кнопок. Я прочитал принятый ответ здесь и адаптировал его. :
public class ButtonLogger
{
private static readonly ILog Logger = LogManager.GetLogger(typeof(ButtonLogger));
public static void AttachButtonLogging(Control.ControlCollection controls)
{
foreach (var button in controls.OfType<Button>())
{
button.Click += LogButtonClick;
}
}
private static void LogButtonClick(object sender, EventArgs eventArgs)
{
Button button = sender as Button;
Logger.InfoFormat("Button clicked: {0} ({1})", button.Text, button.Parent.Text);
}
}
Этот класс используется в конце конструктора в форме, например. :
ButtonLogger.AttachButtonLogging(this.Controls);
Проблема, с которой я столкнулся, заключается в том, что свойство Controls, похоже, не имеет ссылки на мои кнопки. Предположительно, это связано с тем, что кнопки добавляются не непосредственно в форму, а в другой элемент управления, находящийся в свойстве Controls. Однако свойство Controls содержит только один элемент управления ToolStrip.
Есть ли способ использовать все кнопки в форме независимо от их родительского контейнера? Моя конечная цель - добавить оператор журнала к моим кнопкам, поэтому, если это можно сделать каким-то другим способом, помимо методов события нажатия кнопки, я также открыт для этого.
TabControl
и некоторыеButtons
на некоторыхTabPage
, мы должны искать вTabControl.TabPages
. Я столкнулся с этой проблемой, однако, если это не относится к OP, этот код работает нормально. 30.07.2013