2015-01-04 38 views
0

我有變量Month1 & Month2,我需要以某種方式從cb_CheckedChanged轉移到frmMain_Load。如果沒有任何方式傳輸字符串值,我可能會更改一些代碼來使其成爲可能嗎?跨子程序傳輸字符串值

Public Class frmMain 
    Private Sub cb_CheckedChanged(sender As Object, e As EventArgs) Handles chckJan. 
    CheckedChanged, 
    chckFeb.CheckedChanged, 
    chckMar.CheckedChanged, 
    chckApr.CheckedChanged, 
    chckMay.CheckedChanged, 
    chckJun.CheckedChanged, 
    chckJul.CheckedChanged, 
    chckAug.CheckedChanged, 
chckOct.CheckedChanged, 
    chckNov.CheckedChanged, 
    chckDec.CheckedChanged 


    'get all checkboxes 
    Dim Months = Controls.OfType(Of CheckBox)().ToArray() 
    'Get the number of checked CheckBoxes. 
    Dim checkedBoxCount = Months.Count(Function(cb) cb.Checked) 
    'Unchecked CheckBoxes should be enabled if and only if the number of checked CheckBoxes is less than the maximum number allowed. 
    Dim enableUncheckedBoxes = checkedBoxCount < 2 
    'Get the unchecked CheckBoxes. 
    Dim uncheckedBoxes = Months.Where(Function(cb) Not cb.Checked) 
    'Enable or disable the unchecked CheckBoxes as appropriate. 
    For Each uncheckedBox In uncheckedBoxes 
     uncheckedBox.Enabled = enableUncheckedBoxes 
    Next 

    Dim Month1 As String 
    Dim Month2 As String 

    Dim CheckBoxArray1 As CheckBox() = {chckJan, chckFeb, chckMar, chckApr, chckMay, chckJun, chckJul, chckAug, chckSep, chckOct, chckNov, chckDec} 
    For Each CheckBox In CheckBoxArray1 
     If CheckBox.Checked = True And checkedBoxCount = 1 Then 
      Month1 = CheckBox.Name.ToString 
     End If 
    Next 

    Dim CheckBoxArray2 As CheckBox() = {chckJan, chckFeb, chckMar, chckApr, chckMay, chckJun, chckJul, chckAug, chckSep, chckOct, chckNov, chckDec} 
    For Each CheckBox In CheckBoxArray2 
     If CheckBox.Checked = True And checkedBoxCount = 2 Then 
      Month2 = CheckBox.Name.ToString 
     End If 
    Next 

End Sub 


Private Sub frmMain_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
+0

你不能,事件的聲明不能改變。 frmMain_Load是一個運行於'Load'事件的例程,注意'Handles MyBase.Load' –

+0

FormLoad只運行一次,之前你會檢查任何複選框 – Plutonix

+0

有沒有辦法繞過句柄? @Jezzabeanz – SkyTreees

回答

1

真的不知道你的最終目標是,但好像你需要的東西是這樣的:

Public Class frmMain 

    Private Month1 As String 
    Private Month2 As String 

    Private Sub cb_CheckedChanged(sender As Object, e As EventArgs) Handles _ 
     chckJan.CheckedChanged, chckFeb.CheckedChanged, chckMar.CheckedChanged, 
     chckApr.CheckedChanged, chckMay.CheckedChanged, chckJun.CheckedChanged, 
     chckJul.CheckedChanged, chckAug.CheckedChanged, chckSep.CheckedChanged, 
     chckOct.CheckedChanged, chckNov.CheckedChanged, chckDec.CheckedChanged 

     Dim CheckBoxes As CheckBox() = { 
      chckJan, chckFeb, chckMar, chckApr, 
      chckMay, chckJun, chckJul, chckAug, 
      chckSep, chckOct, chckNov, chckDec} 

     Dim checkedBoxes = CheckBoxes.Where(Function(cb) cb.Checked) 
     For Each curCB In CheckBoxes.Where(Function(cb) Not cb.Checked) 
      curCB.Enabled = (checkedBoxes.Count < 2) 
     Next 
     If checkedBoxes.Count = 2 Then 
      Month1 = checkedBoxes.First.Text 
      Month2 = checkedBoxes.Last.Text 
     End If 
    End Sub 

End Class 
+0

這是完美的先生!很少觸及,它已經分類! – SkyTreees