Visual Studio 为MouseEnter和MouseLeave创建一个函数

lsmd5eda  于 2023-05-01  发布在  其他
关注(0)|答案(2)|浏览(157)

我需要做一个函数,当鼠标进入和离开按钮区域时,将显示和隐藏标签。
我开始为每个按钮单独做,但由于将有超过5的代码变得重复,所以有必要使一个功能.我刚开始学习C#,所以有点迷茫。
对于每个按钮,它看起来像这样:

private void BtnP1_MouseEnter(object sender, EventArgs e)
        {
            LblP1.Visible = true;
        }
private void BtnP1_MouseLeave(object sender, EventArgs e)
        {
            LblP1.Visible = false;
        }

标签设置为visible = false,因此当鼠标进入按钮时,它将显示链接的标签,并在离开时隐藏。

请将此作为参考https://youtu.be/qf5R1PI3l6k

7eumitmz

7eumitmz1#

一个方法可以处理任意多个事件。在设计器中,选择多个Buttons,e.例如,通过Ctrl+单击,然后打开 * 属性 * 窗口并单击 * 事件 * 按钮。然后,通过双击事件或从下拉列表中选择现有方法,可以为所有控件生成单个事件处理程序方法。
如果需要引用引发事件的实际控件(在本例中似乎没有),则可以使用sender参数来实现,该参数始终是对引发事件的对象的引用。

kh212irz

kh212irz2#

Jim说的很对,我在这里给你添加一个示例代码:
假设按钮和标签都命名为button1,button2。标签1标签2..:
使事件从发送者处获取特定名称:

private void BMouseMouseEnter(object sender, EventArgs e)
{
    Button? button = sender as Button;
    string buttonName = button.Name;
    int index = int.Parse(buttonName.Substring("button".Length));
    Label? label = this.Controls.Find("label" + index.ToString(), true).FirstOrDefault() as Label;
    label.Visible = true;

}
private void BMouseMouseLeave(object sender, EventArgs e)
{
    Button? button = sender as Button;
    string buttonName = button.Name;
    int index = int.Parse(buttonName.Substring("button".Length));
    Label? label = this.Controls.Find("label" + index.ToString(), true).FirstOrDefault() as Label;
    label.Visible = false;
}

可以向加载或定义中的每个按钮添加相应的事件。它通过查找窗体的所有按钮向它们添加事件。当然,您需要注意的是,如果表单上有其他不应该有此类事件的事件按钮,则需要额外考虑。

foreach (Control control in this.Controls)
{
    if (control is Button)
    {
        control.MouseEnter += new EventHandler(BMouseMouseEnter);
        control.MouseLeave += new EventHandler(BMouseMouseLeave);
    }
}

您还可以手动滑动每个按钮的相应事件的选择事件。

相关问题