2014-03-06 29 views
2

我有兩個forms(1和2)。我一直在與一些代碼作鬥爭,以防止用戶從checkedListBox中選擇ListBox2中的項目(form1)。驗證checkListBox?

我的代碼有點奇怪,因爲即使該項目被添加到從form1,它繼續顯示msgBox。我需要msgBox僅顯示那些未添加到listbox2,form1的項目。

以下是我有:

Public Class Form1 
    Dim ActSubject As Boolean 
    Public Function ActivateSubject() As String 
     Return ActSubject 
    End Function 

    Private Sub ListBox2_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox2.TextChanged 
     Dim x As New Items 
     x.AvailableItems = ListBox2.Items.ToString 
     For Each x In ListBox2.Items 
      If ListBox2.Items.Contains(x) Then 
       ActSubject = True 
      Else 
       ActSubject = False 
      End If 
     Next 
    End Sub 
End Class 

Public Class Form2 
    Dim HaveActSubject As Boolean = Form1.ActivateSubject 
    Private Sub CheckedListBox1_SelectedValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles CheckedListBox1.SelectedValueChanged 
     If HaveActSubject = False Then 
      MsgBox("Sorry! Subject should be activated six month before registration.") 
     End If 
     Return 
    End Sub 
End Class 
+0

爲什麼使用listbox2_textchanged代替listbox2_selectedindexchanged? – matzone

+0

我沒有更好的理由,但無論如何沒有得到預期的輸出。 – nondoo

+0

這段代碼基本上檢查ListBox2中的項是否在ListBox2中。您從不使用CheckedListBox1的內容進行驗證。此外,ActivateSubject應該是一個函數,將一個項目作爲參數並檢查該項目是否在ListBox2中 – David

回答

0

Public Class Form1 
    Public Function ActivateSubject(itm as string) As String 
     Return ListBox2.Items.Contains(itm) 
    End Function 
End Class 

Public Class Form2 
    Dim HaveActSubject As Boolean = Form1.ActivateSubject 
    Private Sub CheckedListBox1_SelectedValueChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles CheckedListBox1.SelectedValueChanged 
     If Form1.ActivateSubject(CheckedListBox1.selectedValue) = False Then 
      MsgBox("Sorry! Subject should be activated six month before registration.") 
     End If 
     Return 
    End Sub 
End Class