2

我只是想知道是否有一种方法可以最大程度地减少应用程序中的代码混乱。

我已经编写了类似的代码:

   private void btnNext_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
    {
        btnNext.Opacity = 1;
    }

    private void btnNext_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
    {
        btnNext.Opacity = 0.5;
    }

    private void btnShowAll_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
    {
        btnShowAll.Opacity = 1;
    }

    private void btnShowAll_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
    {
        btnShowAll.Opacity = 0.5;
    }

    private void btnPrev_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
    {
        btnPrev.Opacity = 1;
    }

    private void btnPrev_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
    {
        btnPrev.Opacity = 0.5;
    }

    private void btnSearch_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
    {
        btnSearch.Opacity = 1;
    }

    private void btnSearch_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
    {
        btnSearch.Opacity = 0.5;
    }

    private void btnSearchStore_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
    {
        btnSearchStore.Opacity = 1;
    }

    private void btnSearchStore_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
    {
        btnSearchStore.Opacity = 0.5;
    }

    private void btnCloseSearch_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
    {
        btnCloseSearch.Opacity = 1;
    }

    private void btnCloseSearch_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
    {
        btnCloseSearch.Opacity = 0.5;
    }

    private void btnHome_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
    {
        btnHome.Opacity = 1;
    }

    private void btnHome_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
    {
        btnHome.Opacity = 0.5;
    }

等等等等...

我是否需要创建一个最初运行的“功能”?还是我必须创建另一个类才能“组织”它们?

有什么建议么?

4

5 回答 5

15

您可以将所有这些函数重写为 2:

private void FadeBtn_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
{
    Button btn = (Button)sender;
    btn.Opacity = 1;
}

private void FadeBtn_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
{
    Button btn = (Button)sender;
    btn.Opacity = 0.5;
}

然后将所有按钮 MouseEnter 和 MouseLeave 事件指向这些函数。

于 2010-03-12T16:06:20.500 回答
2

你需要有 ChangeButtonOpacity 方法:

private void ChangeButtonOpacity(Button button, double newOpacity)
{
    button.Opacity = newOpacity;
}

您可以将处理程序实现为:

private void btn_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
{
    ChangeButtonOpacity((Button)sender, 1);
}

private void btn_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
{
    ChangeButtonOpacity((Button)sender, 0.5);
}

这样,您将只需要两个处理程序。

于 2010-03-12T16:09:19.057 回答
0

创建一个鼠标输入事件并使用它注册所有按钮。在该方法中,您会注意到我将 sender 对象转换为按钮。因此,无论按钮调用什么,您都可以执行此不透明度操作。

private void ButtonMouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
{
  Button button = (Button) sender;
  button.Opacity = 1;
}
于 2010-03-12T16:06:39.347 回答
-1

据我所知,在您的情况下,您可以缩短为:

private void btn_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
{
    (sender as Button).Opacity = 1;
}

private void btn_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e)
{
    (sender as Button).Opacity = 0.5;
}

在设计器中,您可以选择这些事件处理程序,而不是为每个按钮创建新的。

于 2010-03-12T16:08:36.923 回答
-1

如果您不将它用于其他任何事情,也许您可​​以使用按钮的 Tag 属性,然后您可以执行以下操作。

private void btn_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e) 
{ 
    (sender as Button).Opacity = (double)((sender as Button).Tag); 
} 

private void btn_MouseLeave(object sender, System.Windows.Input.MouseEventArgs e) 
{ 
    (sender as Button).Opacity = 0.5;
} 

这将允许您只使用两个处理程序为不同的按钮设置不同的值。

于 2010-03-12T16:54:08.753 回答