【发布时间】:2013-07-30 17:44:57
【问题描述】:
我希望为用户单击的每个 WinForms 按钮单击添加一个日志语句,理想情况下,是父窗体的标识符(例如标题栏)。我看过记录所有鼠标点击的帖子,但我只对记录按钮点击感兴趣。我已阅读接受的答案here 并对其进行了修改:
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。
有没有一种方法可以利用表单上的所有按钮,而不管它们的父容器是什么?我的最终目标是在我的按钮中添加一个日志语句,所以如果除了按钮单击事件方法之外还可以通过其他方式完成,那么我也愿意这样做
【问题讨论】:
标签: c# winforms button logging