2016-04-06 7 views
0

私はここでかなり新しいStack Overflowです。これは私の初めての質問です。この質問が愚かなものであれば、私に親切にしてください。vb.netできれいで短いコードを作る方法

私はこれらのコードをどのように短くすることができますか知っていますか?これらのコードをすべて1行に入れたいと思います。以下のコードをご覧ください。そのように呼ばれ

Public Shared Sub SetUpButton(btn As Button, normalImage As Image, hoverImage as Image) 

    AddHandler btn.MouseLeave, Sub(o, e) btn.Image = normalImage 
    AddHandler btn.MouseHover, Sub(o, e) btn.Image = hoverImage 

End Sub 

Private Sub PB_SearchP_MouseHover(sender As Object, e As EventArgs) Handles PB_SearchP.MouseHover 
    PB_SearchP.Image = My.Resources.search1 
End Sub 

Private Sub PB_SearchP_MouseLeave(sender As Object, e As EventArgs) Handles PB_SearchP.MouseLeave 
    PB_SearchP.Image = My.Resources.search 
End Sub 

Private Sub PB_AddP_MouseHover(sender As Object, e As EventArgs) Handles PB_AddP.MouseHover 
    PB_AddP.Image = My.Resources.add_1_iconhover 
End Sub 

Private Sub PB_AddP_MouseLeave(sender As Object, e As EventArgs) Handles PB_AddP.MouseLeave 
    PB_AddP.Image = My.Resources.add_1_icon 
End Sub 

Private Sub PB_New_MouseHover(sender As Object, e As EventArgs) Handles PB_New.MouseHover 
    PB_New.Image = My.Resources.newhover 
End Sub 

Private Sub PB_New_MouseLeave(sender As Object, e As EventArgs) Handles PB_New.MouseLeave 
    PB_New.Image = My.Resources.neww 
End Sub 

Private Sub PB_Save_MouseHover(sender As Object, e As EventArgs) Handles Btn_Save.MouseHover 
    Btn_Save.Image = My.Resources.savehover 
End Sub 

Private Sub PB_Save_MouseLeave(sender As Object, e As EventArgs) Handles Btn_Save.MouseLeave 
    Btn_Save.Image = My.Resources.save 
End Sub 

Private Sub PB_Update_MouseHover(sender As Object, e As EventArgs) Handles BTN_QUpdate.MouseHover 
    BTN_QUpdate.Image = My.Resources.edithover 
End Sub 

Private Sub PB_Update_MouseLeave(sender As Object, e As EventArgs) Handles BTN_QUpdate.MouseLeave 
    BTN_QUpdate.Image = My.Resources.edit 
End Sub 
+0

Buttonから独自のクラスを派生し、OnMouseXxx()メソッドをオーバーライドします。したがって、これらのイベントハンドラのどれも*必要はありません。 –

+0

@HansPassant 'Button'から派生したものが過剰なようです - OPは' Image'プロパティの自動化に興味があるようです。 – Dai

+0

プログラマーがこれを「怖い」または過度に見つけてしまうのは不思議です。継承はクラスライブラリを効果的に使用するためにwinformsで*重要な*です。イベントハンドラを書く必要はありませんが、過度の機能ではなく、非常にうまくサポートされています。継承が気に入らなければWPFが良い選択肢です。 –

答えて

1

簡単な解決策は、設定アップラムダ関数をイベントハンドラとしての機能を使用することである

SetUpButton(Btn_Save, My.Resources.save, My.Resources.savehover) 
SetUpButton(Btn_Update, My.Resources.update, My.Resources.updatehover) 
SetUpButton(Btn_New, My.Resources.new, My.Resources.newhover) 

などを...

C#では、構文比較のため:

public static void SetUpButton(Button btn, Image normalImage, Image hoverImage) { 
    btn.MouseLeave += (o,e) => btn.Image = normalImage; 
    btn.MouseHover += (o,e) => btn.Image = hoverImage; 
} 
+0

アイデアのおかげで、ありがとう – Kyle

関連する問題