我希望为用户单击的每个 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。
有没有办法可以利用表单上的所有按钮,而不管它们的父容器是什么?我的最终目标是向我的按钮添加一个日志语句,所以如果除了按钮单击事件方法之外可以通过其他方式完成,那么我也对此持开放态度