Nef*_*zen 0 c# listbox winforms
我有这种情况:
Dictionary<Int32, userInfo> users = new Dictionary<Int32, userInfo>();
Run Code Online (Sandbox Code Playgroud)
其中Int32是用户标识,userInfo包含名称和其他详细信息.我想在表单中显示一个名单列表,并允许使用该程序的人双击一个以打开一个窗口(类似于MSN messenger中发生的情况).当双击用户的名字时,我需要知道id,所以我可以这样做
OpenChatWindow(Int32 id, string name);
Run Code Online (Sandbox Code Playgroud)
我真的不知道该怎么做,我正在使用winforms.我想到了ListBox,但又一次,我不确定如何.我该怎么办?
PS.userInfo.name在Dictionary中是唯一的,但我真的不想开始寻找它.
我不会选择将用户信息存储在字典对象中.我将创建一个名为User的类,并在类中存储所有信息,包括id.
覆盖User类的".ToString()"方法,并使其输出User的名称,即
protected override string ToString()
{
return this.Name;
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以直接将"用户"对象添加到"列表"框中,添加后,将显示用户的名称.您可能必须将它们作为对象投射我不是100%如果它们是自动投射的......我会回复你的!
然后在ListBox的SelectedIndexChanged事件上,您可以简单地执行:
var user = myListBox.SelectedItem as User;
Run Code Online (Sandbox Code Playgroud)
这将返回User对象供您用于查找:
OpenChatWindow(user.ID, user.Name);
Run Code Online (Sandbox Code Playgroud)
因此,如果您有一个控制器类,您可以将它连接到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);
}
}
}
Run Code Online (Sandbox Code Playgroud)