2017-05-26 20 views
0

次のコードは、最初のifステートメントで指定されたものを除き、ページ上のどのボタンも色を変えることができます。このコードは機能していましたが、ボタンがクリックされたときに何もしません。ボタンは黄色に変わりますが、デフォルトの色のままです。とにかく、コードを操作して複数の赤いボタンを許可するのではなく、一度に1つのボタンだけを赤くすることもできます。これを読むとき。私はVBのための助けを見つけることができません。誰も助けることができますか?複数のボタン、クリックしたボタンの色を変更する1つのイベント

個人的には、フィールドが空のときにメッセージボックスが表示されないので、Public Subと個人的には関係していると思います。

Public Sub btn_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Click 
    Try 
     Dim btn As Button = sender 
     If btn.Name = "BtnUpdate" Or btn.Name = "BtnBackCust" Or btn.Name = "BtnConfirm" Then 
     ElseIf TxtFirstName.Text = "" Or TxtLastName.Text = "" Or TxtAddress.Text = "" Or cboCountry.SelectedItem = "" Or cboRoomType.SelectedItem = "" Then 
      MsgBox("You must populate all fields") 
     Else 
      btn.BackColor = Color.Red 
      btn.Text = ChosenRoom 
     End If 
    Catch ex As Exception 
    End Try 
End Sub 
+1

コードを隠す代わりに例外をスローすると、問題が見つかる可能性があります。クリックしたときに何が起こっているかを見るためにブレークポイントを設定しようとしましたか?イベントに行っても大丈夫ですか? –

+0

あなたの質問のために、変数のどこかに現在赤いボタンの名前を保持することができます。 –

答えて

2

代わりのMyBase.Clickイベントを使用して、自分のフォームのLoadの各ボタンのハンドルを作成します。

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    For Each Button As Button In Me.Controls.OfType(Of Button)() 
     If Button.Name <> "BtnUpdate" AndAlso Button.Name <> "BtnBackCust" AndAlso Button.Name <> "BtnConfirm" Then 
      AddHandler Button.Click, AddressOf ChangeColor 
     End If 
    Next 
End Sub 

ChangeColorサブを、また、現在の赤が何であるかを追跡するためにRedButton変数を作成ボタン:

Private RedButton As Button = Nothing 
Private Sub ChangeColor(Sender As Object, e As EventArgs) 
    If TypeOf Sender Is Button Then 
     If TxtFirstName.Text = "" OrElse TxtLastName.Text = "" OrElse TxtAddress.Text = "" OrElse cboCountry.SelectedItem = "" OrElse cboRoomType.SelectedItem = "" Then 
      MsgBox("You must populate all fields") 
     Else 
      Dim SenderButton As Button = Sender 
      If RedButton IsNot Nothing Then 
       RedButton.BackColor = Me.BackColor 
      End If 
      If SenderButton IsNot RedButton Then 'This if will toogle the button between Red and the Normal color 
       SenderButton.BackColor = Color.Red 
      End If 

      RedButton = Sender 
     End If 
    End If 
End Sub 
+0

ありがとうございます。これは完全に機能しました – Matthew

関連する問題