2016-03-15 96 views
1

我已經做了一個UserControl(在Plutonix的幫助下),但是我有一點問題需要從狀態更改這些對象。如何在運行時修改動態創建的UserControl對象

我動態與此代碼創建它們:

While UserData.Read 

       Dim CPID As String 
       Dim CPUN As String 
       CPID = UserData("Username").ToString 
       CPUN = UserData("Voornaam").ToString & " " & UserData("Achternaam").ToString 

       Dim CP As New Contacts(CPID, CPUN) 
       CP.Name = CPID 
       CP.ContactName.Name = CPID 
       AddHandler CP.ContactName.Click, AddressOf Chatbox 
       If UserData("Status").ToString = "Online" Then 
        CP.Status = Contacts.ChatStatus.Online 
        If UserData("NieuwBericht").ToString = "Ja" Then 
         CP.MsgStatus = Contacts.ChatMsgStatus.Ja 
        ElseIf UserData("NieuwBericht").ToString = "Nee" Then 
         CP.MsgStatus = Contacts.ChatMsgStatus.Nee 
        Else 
         CP.MsgStatus = Contacts.ChatMsgStatus.Onbekend 
        End If 
       ElseIf UserData("Status").ToString = "Afwezig" Then 
        CP.Status = Contacts.ChatStatus.Afwezig 
        If UserData("NieuwBericht").ToString = "Ja" Then 
         CP.MsgStatus = Contacts.ChatMsgStatus.Ja 
        ElseIf UserData("NieuwBericht").ToString = "Nee" Then 
         CP.MsgStatus = Contacts.ChatMsgStatus.Nee 
        Else 
         CP.MsgStatus = Contacts.ChatMsgStatus.Onbekend 
        End If 
       ElseIf UserData("Status").ToString = "Offline" Then 
        CP.Status = Contacts.ChatStatus.Offline 
        If UserData("NieuwBericht").ToString = "Ja" Then 
         CP.MsgStatus = Contacts.ChatMsgStatus.Ja 
        ElseIf UserData("NieuwBericht").ToString = "Nee" Then 
         CP.MsgStatus = Contacts.ChatMsgStatus.Nee 
        Else 
         CP.MsgStatus = Contacts.ChatMsgStatus.Onbekend 
        End If 
       Else 
        CP.Status = Contacts.ChatStatus.Onbekend 
        If UserData("NieuwBericht").ToString = "Ja" Then 
         CP.MsgStatus = Contacts.ChatMsgStatus.Ja 
        ElseIf UserData("NieuwBericht").ToString = "Nee" Then 
         CP.MsgStatus = Contacts.ChatMsgStatus.Nee 
        Else 
         CP.MsgStatus = Contacts.ChatMsgStatus.Onbekend 
        End If 
       End If 

       CP.Dock = DockStyle.Top 
       ChatContactPanel.Controls.Add(CP) 

      End While 

至於結果,我得到這樣的:

enter image description here

現在我的問題是: 我怎樣才能改變MsgStatus和地位聯繫每個用戶的對象

回答

2

假設您想查找「Patricia」:

Dim user = "Patricia" 

Dim chatter = ChatContactPanel.Controls. 
        OfType(Of Contacts). 
        FirstOrDefault(Function(c) c.ChatName.StartsWith(user)) 
If chatter IsNot Nothing Then 
    chatter.Status = chatter.ChatStatus.Online 
End If 

我猜「聯繫人」是用戶控件名稱,「ChatContactPanel」是存儲它們的容器控件。 original answer對此信息進行編輯。

  • 這將是更好的編號找到他們,因爲名字很少獨特
  • 這也將是,即使是ChatUser類更好地管理它,而不是發現他們每次有新的變化。

當然,還有其他運行時數據是您的應用程序跟蹤用戶。在ChatUser類A ChatControl屬性將阻止您不必在所有搜索它們,並允許類進行管理:

myChatBox.Status = myStatus 

類也可以創建已設置的屬性爲您的控制。

+0

謝謝你:)你是一個大師 –

1

我知道這不是你的問題的答案 - 這只是一個有用的指針 - 請隨時讓我知道如果你要我刪除這個 - 並道歉,如果我錯過了什麼,如果有在我的代碼中有拼寫錯誤,但是您的大塊語句If..End If包含大量重複的代碼。它可以這樣重寫 -

Select Case Userdata("Status").ToString 
    Case "Online" 
     CP.Status = Contacts.ChatStatus.Online 
    Case "Afwezig" 
     CP.Status = Contacts.ChatStatus.Afwezig 
    Case "Offline" 
     CP.Status = Contacts.ChatStatus.Offline 
    else 
     CP.Status = Contacts.ChatStatus.OnBekend 
    End Select 

    If UserData("NieuwBericht").ToString = "Ja" Then 
     CP.MsgStatus = Contacts.ChatMsgStatus.Ja 
    ElseIf UserData("NieuwBericht").ToString = "Nee" Then 
     CP.MsgStatus = Contacts.ChatMsgStatus.Nee 
    Else 
     CP.MsgStatus = Contacts.ChatMsgStatus.Onbekend 
    End If 

也道歉,如果代碼是完全錯誤的,但我無法測試它。

+0

這是我試圖用[原始答案](http://stackoverflow.com/a/35872915/1070452)做的點的三分之二,即使是DRY該點的鏈接部分丟失了。更好的辦法是,如果DB和UC使用相同的事情的國家 – Plutonix

+0

@plutonix同意 –