我有一个类Client,一个Class Assignment和一个静态类Clients,它有一个静态列表。 Client类构造函数接受Assignment对象。创建客户端和分配对象后,将客户端添加到静态列表中。
我的问题在于用户需要能够在列表框中选择任何客户端,并将“分配描述”值显示在文本框中。如何在不收到错误的情况下执行此操作,告诉我“无法将类型'System.String'的对象强制转换为'Rimu.Client'。”
private void clientListBox_MouseClick(object sender, MouseEventArgs e)
{
if (clientListBox.SelectedItem != null)
{
Client current = (Client)clientListBox.SelectedItem;
current.CurrentAssignment.Description = descriptionText.Text;
}
}
任何帮助将不胜感激,提前致谢。
答案 0 :(得分:0)
我会将您的客户端对象存储在字典中。 “词典”中每个项目的键将是您放入ListBox的名称。
然后,当选择ListBox中的项目时,您可以从字典中获取该对象。
您收到错误是因为您无法将字符串强制转换为任意对象。
答案 1 :(得分:0)
由于您想直接从ListBox转换SelectedItem,您必须将它们直接添加到列表框中,如下所示:
foreach (var client in Clients)
{
clientListBox.Add(client);
}
现在Client对象存储在ListBox中,但在winform(或wpf应用程序,您未指定)上显示给用户的字符串将是对用户没有多大意义的类名。
要修复此问题,请覆盖Client类的ToString()方法
public class Client
{
// you've already written this
public override string ToString()
{
// construct a meaningful string here
return string.Format("{0} {1}", this.FirstName, this.LastName);
}
}