C# 缩短重复代码的更好方法

标签 c# winforms

以下代码允许我将鼠标悬停在按钮上的图像上,但需要加载大量重复代码。我想知道是否有一种方法可以缩短并允许使用同一段代码但使用不同的按钮名称。

我知道 private void *NAME* 可以是相同的,由不同的按钮使用,并允许我缩短以下内容,但随后让我将鼠标悬停在所有按钮上而不是一次比单独的。

private void button1_Leave(object sender, EventArgs e)
    {
        this.button1.BackgroundImage = ((Image)(Properties.Resources.leave_img));
    }

    private void btnfb_Leave(object sender, EventArgs e)
    {
        this.btnfb.BackgroundImage = ((Image)(Properties.Resources.leave_img));
    }

    void btnfb_MouseMove(object sender, MouseEventArgs e)
    {
        this.btnfb.BackgroundImage = ((Image)(Properties.Resources.hover_img));
    }

    private void btndiscord_Leave(object sender, EventArgs e)
    {
        this.btndiscord.BackgroundImage = ((Image)(Properties.Resources.leave_img));
    }

    void btndiscord_MouseMove(object sender, MouseEventArgs e)
    {
        this.btndiscord.BackgroundImage = ((Image)(Properties.Resources.hover_img));
    }

    private void btn_pp_Leave(object sender, EventArgs e)
    {
        this.btn_pp.BackgroundImage = ((Image)(Properties.Resources.leave_img));
    }

    void btn_pp_MouseMove(object sender, MouseEventArgs e)
    {
        this.btn_pp.BackgroundImage = ((Image)(Properties.Resources.hover_img));
    }

    private void btnhelp_Leave(object sender, EventArgs e)
    {
        this.btnhelp.BackgroundImage = ((Image)(Properties.Resources.leave_img));
    }

    void btnhelp_MouseMove(object sender, MouseEventArgs e)
    {
        this.btnhelp.BackgroundImage = ((Image)(Properties.Resources.hover_img));
    }

    private void btnsave_Leave(object sender, EventArgs e)
    {
        this.btnsave.BackgroundImage = ((Image)(Properties.Resources.leave_img));
    }

    void btnsave_MouseMove(object sender, MouseEventArgs e)
    {
        this.btnsave.BackgroundImage = ((Image)(Properties.Resources.hover_img));
    }

    private void btnmini_Leave(object sender, EventArgs e)
    {
        this.btnmini.BackgroundImage = ((Image)(Properties.Resources.leave_img));
    }

最佳答案

您可以将所有事件连接到同一个处理程序...

private void MyButtonLeaveHandler(object sender, EventArgs e)
{
 Button button = sender as Button;
 if (button != null)
 { 
     button.BackgroundImage = ((Image)(Properties.Resources.leave_img));
 }
}

this.button1.Leave += MyButtonLeaveHandler;
this.btnfb.Leave += MyButtonLeaveHandler;

同样,您可以为 MouseLeave 事件创建另一个通用处理程序

关于C# 缩短重复代码的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45132138/

相关文章:

c# - 始终以管理员身份运行使用 Windows 桌面桥转换的应用程序?

c# - (.OFX/.QFX/.QIF/.QBO/.OFC)文件转换器

c# - 具有计数和时间条件的缓冲区运算符

c# - 跨线程调用异常

c# - 如何让 WebBrowser 等到它完全加载?

c# - 通过使用 moq 模拟另一个方法来测试一个方法是否被调用

wpf - 调整托管数百个类似控件的 WPF 应用程序性能

c# - TableLayoutPanel 删除空行

c# - "X"类型的对象无法转换为 "X"类型的对象

c# - InvalidOperationException : No authenticationScheme was specified, 并且没有找到 DefaultChallengeScheme