2016-03-15 2 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 имеет право редактировать эту информацию.

  • Было бы лучше, чтобы найти их, потому что Id имена редко уникальны
  • Было бы даже лучше для ChatUser класса, чтобы управлять им, а не находя их каждый раз, когда что-то меняется.

Несомненно, есть другие данные о времени выполнения ваших дорожек приложений пользователем. ChatControl собственности в ChatUser классе предотвратило бы от необходимости искать их на всех и позволяют класс управлять им:

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) даже с сухим связанная часть точки была потеряна. Еще лучше было бы, если бы DB и UC использовали одни и те же вещи для штатов – Plutonix

+0

@plutonix согласился –

Смежные вопросы