【问题标题】:Windows Forms - detecting button click from a panel inside the formWindows 窗体 - 从窗体内的面板检测按钮单击
【发布时间】:2013-01-30 16:54:06
【问题描述】:

我有一个名为Windows FormForm1,在Form1 内部我有一个名为panel1 的面板。我使用这个面板只是为了在他身上添加buttons。目前正好有 9 个buttons,但如果这与我当前的问题有关,我打算动态更改它们的数量。我需要的是检测何时单击此面板中的按钮的方法(我也有其他按钮,但是它们位于面板外的Form1 中)并且还确切知道单击了哪个按钮。 我试过这个:

private void panel1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("HI" + sender);
        }

如您所见,这并不多,但足以看出我无法使用 pnael1's_click 事件来做到这一点。使用此代码,当我单击面板中除按钮之外的任何位置时,我会收到消息框。那我该怎么做。是否可以从panel1 内部执行此操作,或者我应该使用另一种方法对这些按钮进行分组,但重要的是能够保持现在在panel1 中的那些按钮与我可能(以及在事实上我确实有)?

【问题讨论】:

标签: c# winforms visual-studio-2010


【解决方案1】:

创建动态按钮时,您注册该按钮实例的 Click 事件并附加到事件处理程序(单个处理程序可以处理所有按钮的单击事件):

var dynamicButton1 = new Button();
dynamicButton1.Click += MyButtonClickHandler;

只要MyButtonClickHandler 具有适合Click 事件的签名(即返回void 并采用objectEventArgs 的任何方法,处理程序就应该响应动态按钮的单击事件只要按钮实例存在。

【讨论】:

    【解决方案2】:

    只要您不随时间动态添加控件,并且在表单初始化后按钮的数量是固定的,您就可以使用它为面板中的所有按钮添加点击事件处理程序:

    foreach (var button in panel.Controls.OfType<Button>())
    {
        button.Click += HandleClick;
    }
    

    【讨论】:

    • 嗯,这回答了我的直接问题,所以我会接受它,但我确实打算动态添加按钮,所以你能建议一个更好的方法来处理这个任务吗?
    • OP 声明他正在动态添加它们。
    • @retailcoder 不清楚他是在应用程序开始时完全添加动态数字,还是在表单初始化后随着时间的推移添加动态数字。这涵盖了第一种情况。
    • @Leron 在您动态添加按钮时添加点击处理程序。
    • @Servy 谢谢,我想我知道如何处理这个问题,所以感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2011-06-11
    • 2017-07-13
    • 2015-05-02
    • 2010-11-10
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多