开发者

.NET/C#: How to remove/minimize code clutter while 'triggering' Events

I just wanna find out if there's a way I could minimize code clutter in my application.

I have written code/s similar to this:

   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;
    }

and so on and so forth...

Do I need to create a 'function' that will run initially? Or do I have to create another class just so I can 'organize' them?

Any suggestions?


You could rewrite all those functions into 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;
}

And then point all of the buttons MouseEnter and MouseLeave events to those functions.


You need to have ChangeButtonOpacity method:

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

And you can implement your handlers as:

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);
}

In this way you will need only two handlers.


Create a Mouse Enter Event and register all the buttons with it. Inside the method you will notice I cast the sender object as a button. So what ever button calls it you can perform this opacity action on.

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


As far I can see, in your case you can shorten to:

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;
}

In the designer, you can choose these event handlers then instead of creating new ones for each button.


Perhaps you can use the Tag property of the button if your not using it for anything else, Then you can do the following.

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;
} 

This would allow you to setup different values for different buttons using only two handlers.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜