0

パネル、ピクチャボックス、ラベルで構成される「ボタン」があります。

ピクチャボックスとラベルを無効にして、MouseEnter (および背景色) をアクティブに保ちます。ただし、無効なラベルには通常の色あせたテキストがあります.ラベルを有効にしたまま、無効にしたときのようにマウスイベントを無視する方法はありますか?

Private Sub panelBackup_MouseEnter(sender As Object, e As EventArgs) Handles panelBackupButton.MouseEnter
    Dim btn As Panel = DirectCast(sender, Panel)
    btn.BackColor = Color.Gray
End Sub

Private Sub panelBackup_MouseLeave(sender As Object, e As EventArgs) Handles panelBackupButton.MouseLeave
    Dim btn As Panel = DirectCast(sender, Panel)
    btn.BackColor = Color.LightGray
End Sub
4

1 に答える 1

1

ラベルにも同じイベントを設定する

Private Sub panelBackup_MouseEnter(sender As Object, e As EventArgs) 
                   Handles panelBackupButton.MouseEnter, Label1.MouseEnter 
    Dim btn As Panel = TryCast(sender, Panel) 
    if Not btn Is Nothing then 
        btn.BackColor = Color.Gray 
    else 
        Dim lbl As Label = TryCast(sender, Label)
        lbl.BackColor = Color.Gray 
    end if
End Sub

Private Sub panelBackup_MouseLeave(sender As Object, e As EventArgs) 
                   Handles panelBackupButton.MouseLeave, Label1.MouseLeave 
    Dim btn As Panel = TryCast(sender, Panel) 
    if Not btn Is Nothing then 
        btn.BackColor = Color.LightGray 
    else 
        Dim lbl As Label = TryCast(sender, Label)
        lbl.BackColor = Color.LightGray 
    end if
End Sub 

また、直接 panelBackup.BackColor プロパティを使用できるため、DirectCast を削除しました (それ以外の場合は、パネルまたはラベルによって発生したイベントを区別するために不要なロジックを追加する必要があります。

編集:あなたのコメントを見て、キャストを再導入するメソッドを変更しましたが、TryCast を使用して、ラベルによってイベントが発生したときに例外を回避しました。BackColor は基本クラス (Control) から継承されたプロパティであるため、特定の Panel または Label ではなく汎用 Control に TryCast することはおそらく可能であることに言及する必要があります。

于 2012-08-31T10:51:34.747 に答える