如何触发列表框数据源项添加/删除事件

时间:2017-12-02 01:46:24

标签: c# listbox controls

我正在使用C#Windows Form创建在线聊天室。我目前正通过计时器使用数据源更新列表框项目。

    private void T_Tick(object sender, EventArgs e)
    {
          OnlineUsers = remoteObj.GetOnlineUser(); // ArrayList
          lstOnlineUser.DataSource = OnlineUsers; 
    }

一切都很好。但是,我想对此进行扩展,以便创建一个显示在线用户名的自定义用户控件。

问题是:当用户在线或离开聊天室而不使用数据源时,如何删除/添加用户控件?

我尝试了什么:

  • ObservableCollection - 而不是ArrayList,以便我可以使用CollectionChanged事件 - 不太确定如何实现它
  • 删除所有用户控件并通过计时器重新创建(Laggy)

我正在寻找更新/删除ArrayList时触发的事件。比如这样:

    private void OnlineUsers_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
    {
        if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)
        {
            UserUC User = new UserUC(e.NewItems[0].ToString()); // Not sure if the 'NewItems' list contains the newly added users
        }
        else if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Remove)
        {
             // Not sure how I would go about removing
        }
    }

显然,ArrayList并不包含这样的事情,而是我尝试使用ObservableCollection的原因。

以下是方法:

public class RemotingObject : MarshalByRefObject
{
    ArrayList OnlineUsers = new ArrayList();

    public bool JoinToChatRoom(string name)
    {
        if (OnlineUsers.IndexOf(name) > -1)
            return false;
        else
        {
            OnlineUsers.Add(name);
            SendMsgToSvr(name + ".Hey, I joined the chat room.");
            return true;
        }
    }
    public void LeaveChatRoom(string name)
    {
        OnlineUsers.Remove(name);
        SendMsgToSvr(name + "Goodbye, I left the chat room.");
    }
    public ArrayList GetOnlineUser()
    {
        return OnlineUsers;
    }

}

我希望你理解并感谢你的阅读!

0 个答案:

没有答案