我正在使用C#Windows Form创建在线聊天室。我目前正通过计时器使用数据源更新列表框项目。
private void T_Tick(object sender, EventArgs e)
{
OnlineUsers = remoteObj.GetOnlineUser(); // ArrayList
lstOnlineUser.DataSource = OnlineUsers;
}
一切都很好。但是,我想对此进行扩展,以便创建一个显示在线用户名的自定义用户控件。
问题是:当用户在线或离开聊天室而不使用数据源时,如何删除/添加用户控件?
我尝试了什么:
我正在寻找更新/删除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;
}
}
我希望你理解并感谢你的阅读!