2015-04-17 111 views
-1

我有一個程序,用於選擇與程序中的圖像相關的選項,例如,對於每個複選框,對於一個或兩個投影機有適當的圖像選項。當每個複選框被打勾時,我已經調用了這個子程序,但是我想知道是否可以檢查在groupbox中選中了哪個?只是想讓這更有效複選框問題

Sub chkValid() 
    If chkRadioMic.Checked = True Then 
     picRadioMic.BorderStyle = BorderStyle.Fixed3D 
    Else 
     picRadioMic.BorderStyle = BorderStyle.None 
    End If 
    If chkFixedMic.Checked = True Then 
     picFixedMic.BorderStyle = BorderStyle.Fixed3D 
    Else 
     picFixedMic.BorderStyle = BorderStyle.None 
    End If 
    If chkMediaPlayer.Checked = True Then 
     picMedia.BorderStyle = BorderStyle.Fixed3D 
    Else 
     picMedia.BorderStyle = BorderStyle.None 
    End If 
    If chkLighting.Checked = True Then 
     picLighting.BorderStyle = BorderStyle.Fixed3D 
    Else 
     picLighting.BorderStyle = BorderStyle.None 
    End If 
    If chkRemote.Checked = True Then 
     picRemote.BorderStyle = BorderStyle.Fixed3D 
    Else 
     picRemote.BorderStyle = BorderStyle.None 
    End If 
End Sub 

Private Sub chkRadioMic_CheckedChanged(sender As Object, e As EventArgs) Handles chkRadioMic.CheckedChanged 
    chkValid() 
End Sub 

Private Sub chkFixedMic_CheckedChanged(sender As Object, e As EventArgs) Handles chkFixedMic.CheckedChanged 
    chkValid() 
End Sub 

Private Sub chkMediaPlayer_CheckedChanged(sender As Object, e As EventArgs) Handles chkMediaPlayer.CheckedChanged 
    chkValid() 
End Sub 

Private Sub chkLighting_CheckedChanged(sender As Object, e As EventArgs) Handles chkLighting.CheckedChanged 
    chkValid() 
End Sub 

Private Sub chkRemote_CheckedChanged(sender As Object, e As EventArgs) Handles chkRemote.CheckedChanged 
    chkValid() 
End Sub 

回答

1

是的,但那不是路要走。使用多個Handles將您的控件分組到同一事件,可以使其更有效。該方法也不需要次級子程序。像這樣:

Private Sub chk_CheckedChanged(sender As Object, e As EventArgs) Handles chkRadioMic.CheckedChanged, chkFixedMic.CheckedChanged, chkMediaPlayer.CheckedChanged, chkLighting.CheckedChanged, chkRemote.CheckedChanged 
    If chkRadioMic.Checked = True Then 
     picRadioMic.BorderStyle = BorderStyle.Fixed3D 
    Else 
     picRadioMic.BorderStyle = BorderStyle.None 
    End If 
    If chkFixedMic.Checked = True Then 
     picFixedMic.BorderStyle = BorderStyle.Fixed3D 
    Else 
     picFixedMic.BorderStyle = BorderStyle.None 
    End If 
    If chkMediaPlayer.Checked = True Then 
     picMedia.BorderStyle = BorderStyle.Fixed3D 
    Else 
     picMedia.BorderStyle = BorderStyle.None 
    End If 
    If chkLighting.Checked = True Then 
     picLighting.BorderStyle = BorderStyle.Fixed3D 
    Else 
     picLighting.BorderStyle = BorderStyle.None 
    End If 
    If chkRemote.Checked = True Then 
     picRemote.BorderStyle = BorderStyle.Fixed3D 
    Else 
     picRemote.BorderStyle = BorderStyle.None 
    End If 
End Sub 

編輯:或者你可以嘗試這種方式更時尚的方式,但我不能保證它的作品,因爲我沒有辦法去嘗試它的那一刻:

Private Sub chk_CheckedChanged(sender As Object, e As EventArgs) Handles chkRadioMic.CheckedChanged, chkFixedMic.CheckedChanged, chkMediaPlayer.CheckedChanged, chkLighting.CheckedChanged, chkRemote.CheckedChanged 
    Dim assPicBox as PictureBox = CType(("pic" & sender.Name.Remove(0,3)).ToString, PictureBox) 
    If sender.Checked = True Then 
     assPicBox.BorderStyle = BorderStyle.Fixed3D 
    Else 
     assPicBox.BorderStyle = BorderStyle.None 
    End If 
End Sub 
0

編輯:我沒有」 t通知你正在修改不同的項目,所以我添加項目來修改這樣的。

你可以讓你的函數只檢查通過複選框:

Sub chkValid(byval sender as checkbox, byval target as **Here the TYPE of picRemote, picLighting, etc, guess ImageBox**) 
    If sender.Checked = True Then 
    picRemote.BorderStyle = BorderStyle.Fixed3D 
    Else 
    picRemote.BorderStyle = BorderStyle.None 
    End If 
End Sub 

所以在您的活動,只需調用函數告訴它哪個是真的,什麼需要修改:

Private Sub chkRadioMic_CheckedChanged(sender As Object, e As EventArgs) Handles chkRadioMic.CheckedChanged 
    chkValid((CheckBox) sender, **TheImageBox_you_want_to_modify**) 
End Sub 
0

也許是這樣的想法:

窗體加載

chkRadioMic.tag= picRadioMic 
chkFixedMic.tag= picFixedMic 
chkMediaPlayer.tag= picMedia 
chkLighting.tag= picLighting 
chkRemote.tag= picRemote 

的新方法:

Sub chkValid(p_check as checkbox, p_picRadioMic as picturebox) 
    If p_check.Checked = True Then 
     p_picRadioMic.BorderStyle = BorderStyle.Fixed3D 
    Else 
     p_picRadioMic .BorderStyle = BorderStyle.None 
    End If 
End Sub 

單處理器:

Private Sub chkRadioMic_CheckedChanged(sender As Object, e As EventArgs) Handles chkRadioMic.CheckedChanged, chkFixedMic.CheckedChanged, chkMediaPlayer.CheckedChanged,chkLighting.CheckedChanged, chkRemote.CheckedChanged 
chkValid(ctype(sender, checkbox),ctype(ctype(sender, checkbox).tag, picturebox)) 
End Sub 
0

這不是CPU週期方面更有效,但對你的眼睛:

Dim allCheckedCheckBoxes = From chk in GroupBox1.Controls.OfType(Of CheckBox) 
          Where chk.Checked 
For Each chk As CheckBox in allCheckedCheckBoxes 
' ... ' 
Next 

如果它是一個單一的CheckBox你可以使用FirstFirstOrdefault

Dim checkedCheckBox As CheckBox = allCheckedCheckBoxes.FirstOrdefault() 
If checkedCheckBox IsNot Nothing Then 
    ' .. ' 
End if 
+0

你的想法存在的問題是,他將無法針對不同的'ImageBox'控件進行修改,因爲他現在正在進行修改。這一點以及當您只修改一個事件時,您將強制檢查所有項目。 –