如何在运行时修改动态创建的UserControl对象

时间:2016-03-15 13:50:40

标签: .net vb.net user-controls

我已经创建了一个UserControl(在Plutonix的帮助下),但是从状态更改这些对象时我遇到了一些问题。

我使用以下代码动态创建它们:

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 个答案:

答案 0 :(得分:2)

假设您想找到" Patricia":

ChatUser

我在猜测"联系人"是用户控件名称," ChatContactPanel"是存储它们的容器控件。 EPPlus Large Dataset Issue with Out of Memory Exception对此信息进行了编辑。

  • 最好通过Id找到它们,因为名称很少是唯一的
  • ChatControl类管理它而不是每次发生变化时都找到它们会更好。

当然,您的应用会跟踪用户跟踪的其他运行时数据。 ChatUser类中的myChatBox.Status = myStatus 属性会阻止您完全搜索它们并允许该类对其进行管理:

<?php 
include('dbcategory.php');

?>
<script type="text/javascript">


var app = true;



function rFields1(elm){
    if (app == false){

var tra = elm.parentNode.parentNode;
tra.remove();

    }
    app = true;
}

function addFields1(){
    if(app == true){    
    var container = document.getElementById("container1");
    var table = document.createElement("table");

    table.border=1; 
    table.cellspacing=0;     
    table.id ="education";
    table.name = "education[]";     
    container.appendChild(document.createTextNode(""));
    var tr = document.createElement("tr");

    var td1 = document.createElement("td");
    td1.valign = "top";

    var slct = document.createElement("select"); //? how do I fix this up
    slct.id = "institution";
    slct.name = "institution[]";
    //some php code that is generating js code
    <?php
    $sql1a = "SELECT * FROM levels ORDER BY id asc";
    $smt1a = $dbs->prepare($sql1a);
    $smt1a -> execute();
    while($row1a=$smt1a->fetch(PDO::FETCH_ASSOC))
    {
        echo("var opt=document.createElement(\"option\");\r\n");
        echo("opt.value='$row1a[level]';\r\n");
        echo("opt.text ='$row1a[level]';\r\n");
        echo("slct.appendChild(opt);");
    }
    ?>

    slct.value='<?php echo $_GET['id2']; ?>';                       //container.add(option);
    container.appendChild(slct);//? how do I fix this up
        //      select1.appendChild(option);
    td1.appendChild(slct);
    tr.appendChild(td1);




    container.appendChild(document.createElement("br"));


    table.appendChild(tr);  
    container.appendChild(table);   
    app = false;
    }

    else {
    colour.onclick=function(){
    rFields1(this);};   
        //  app = true;
    }
    }

</script>
<form id="myform" action="" align="center" method="post" enctype="multipart/form-data">
<div id="div2">
<table border="1" cellspacing="0" style="margin-top:12px width="900"">
<colgroup>
<col span="1">
</colgroup>

<input type="hidden" id="idz" name="idz">



<br><H2 align="center">EDUCATION</H2><br>
<div id="container1">
<table border="1" id="education" name="education[]" cellspacing="0" style="margin-top:12px width="900"">

<colgroup>
<col span="1">
</colgroup>
<input name="colour" id="colour" type="checkbox" onclick="addFields1()" />
<a href="#" type="hidden" id="Remove" name="Remove" onclick="rFields1(this)"></a>


</table>

</div>


</table>


</form>
<br>

该类还可以使用已设置的属性为您创建控件。

答案 1 :(得分: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

如果代码完全错误也会道歉,但我无法测试它。