我遇到这种情况:
Dictionary<Int32, userInfo> users = new Dictionary<Int32, userInfo>();
其中Int32是用户标识,userInfo包含名称和其他详细信息。 我想在表单中显示一个名单列表,并允许使用该程序的人双击一个以打开一个窗口(类似于MSN messenger中发生的情况)。当双击用户的名字时,我需要知道id,所以我可以做
OpenChatWindow(Int32 id, string name);
我真的不知道怎么做,我正在使用winforms。我想到了ListBox,但又一次,我不确定如何。我该怎么办?
PS。 userInfo.name在Dictionary中是唯一的,但我真的不想开始寻找它。
答案 0 :(得分:6)
我不会选择将用户信息存储在字典对象中。我将创建一个名为User的类,并在类中存储所有信息,包括id。
覆盖User类的“.ToString()”方法,并使其输出User的名称,即
。protected override string ToString()
{
return this.Name;
}
然后,您可以直接将“用户”对象添加到“列表”框中,添加后,将显示用户名。你可能不得不把它们作为对象投射我不是100%如果它们是自动投射的......我会回复你的!
然后在ListBox的SelectedIndexChanged事件上,你可以简单地执行:
var user = myListBox.SelectedItem as User;
将返回User对象供您查找:
OpenChatWindow(user.ID, user.Name);
因此,如果你有一个控制器类,你可以将它连接到List框的SelectedIndexChanged事件,然后处理你想要做的事情:
public void OnUserSelected(object sender, EventArgs e)
{
var lstBox = sender as ListBox;
if (lstBox != null)
{
if (lstBox.SelectedItem is User)
{
var user = lstBox.SelectedItem as User;
OpenChatWindow(user.ID, user.Name);
}
}
}
答案 1 :(得分:2)
以这种方式更改userInfo类,因此它将包含userId(如果它现在没有它)。然后你可以将字典数据绑定到列表框:
listBox.DisplayMember = "Name";
listBox.ValueMember = "userId";
listBox.DataSource = new List<UserInfoClass>(users.Values);
然后您可以简单地将SelectedItem属性转换为userInfo类:
UserInfoClass userInfo = (UserInfoClass)listBox.SelectedItem;
OpenChatWindow(userInfo.userId, userInfo.Name);