C# 单击列表框中的项目并在多行文本框中查看详细信息
我想单击列表框中的一个项目,并将传递到该列表框的属性显示到多行文本框中 下面是我写的表单初始化代码C# 单击列表框中的项目并在多行文本框中查看详细信息,c#,textbox,listbox,C#,Textbox,Listbox,我想单击列表框中的一个项目,并将传递到该列表框的属性显示到多行文本框中 下面是我写的表单初始化代码 public Form1() { InitializeComponent(); ReadFromFile.Read("sample.GED"); foreach (KeyValuePair<int, Individual> kvp in ReadFromFile.individuals) {
public Form1()
{
InitializeComponent();
ReadFromFile.Read("sample.GED");
foreach (KeyValuePair<int, Individual> kvp in ReadFromFile.individuals)
{
listBox2.Items.Add("ID = " + kvp.Value.id + " Name = " + kvp.Value.name.givenName + " " + kvp.Value.name.surname + " DoB = " + kvp.Value.birth.date);
}
int testIndividual = 94;
string genderOut = "";
if (ReadFromFile.individuals[testIndividual].gender == "M")
{
genderOut = "MALE";
}
else if (ReadFromFile.individuals[testIndividual].gender == "F")
{
genderOut = "FEMALE";
}
try
{
textBox1.AppendText(
"Name = " + ReadFromFile.individuals[testIndividual].name.givenName + " "
+ ReadFromFile.individuals[testIndividual].name.surname
+ Environment.NewLine + "Gender = " + genderOut
+ Environment.NewLine + "Birth date = " + ReadFromFile.individuals[testIndividual].birth.date
+ Environment.NewLine + "Birth place = " + ReadFromFile.individuals[testIndividual].birth.place
+ Environment.NewLine + "Death date = " + ReadFromFile.individuals[testIndividual].death.date
+ Environment.NewLine + "Death place = " + ReadFromFile.individuals[testIndividual].death.place);
}
catch
{
MessageBox.Show("This individual doesnt exist");
}
}
}
public Form1()
{
初始化组件();
ReadFromFile.Read(“sample.GED”);
foreach(ReadFromFile.Persons中的KeyValuePair kvp)
{
列表框2.Items.Add(“ID=“+kvp.Value.ID+”Name=“+kvp.Value.Name.givenName+”+kvp.Value.Name.姓氏+”DoB=“+kvp.Value.birth.date”);
}
int-testIndividual=94;
字符串genderOut=“”;
if(ReadFromFile.personals[testIndividual].gender==“M”)
{
genderOut=“男”;
}
else if(ReadFromFile.personals[testIndividual].gender==“F”)
{
genderOut=“女性”;
}
尝试
{
textBox1.AppendText(
“Name=“+ReadFromFile.personals[testIndividual].Name.givenName+”
+ReadFromFile.personals[testIndividual].name.name
+Environment.NewLine+“Gender=“+genderOut”
+Environment.NewLine+“Birth date=“+ReadFromFile.personals[testIndividual].Birth.date”
+Environment.NewLine+“出生地=“+ReadFromFile.personals[testIndividual].Birth.place”
+Environment.NewLine+“Death date=“+ReadFromFile.personals[testIndividual].Death.date”
+Environment.NewLine+“Death place=“+ReadFromFile.personals[testIndividual].Death.place”);
}
抓住
{
MessageBox.Show(“这个人不存在”);
}
}
}
我想添加更多内容,以便单击列表框项目,该项目的详细信息将显示在文本框中
我感觉可能必须重写ToString()方法或正则表达式。我还是一个新手,所以请对我放松:)谢谢你你需要为你的列表框处理
SelectedIndexChanged
事件
一种方法是打开Form1.cs[Design]并选择列表框。在特性网格(Alt+Enter)中,单击如下所示的图标:
public class Individual
{
// ... your code
public string DisplayName
{
get { return String.Format("{0} {1}), name.givenName, name.surname; }
}
// ... the rest of your code
}
listBox1.DisplayMember = "name";
找到事件SelectedIndexChanged
,然后双击它。这将在自动生成的Form1.cs.designer文件中为您连接一个事件处理程序
接下来,将Form1类的代码替换为以下代码:
public partial class Form1 : Form
{
private Dictionary<int, Individual> _individuals;
public Form1()
{
InitializeComponent();
ReadFromFile.Read("sample.GED");
_individuals = ReadFromFile.individuals;
listBox1.DataSource = _individuals.Select(individual => individual.Value).ToList();
listBox1.DisplayMember = "name";
listBox1.ValueMember = "id";
}
private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
{
textBox1.Clear();
var individual = listBox1.SelectedItem as Individual;
string genderOut = (individual.Gender == "M") ? "MALE" : "FEMALE";
var displayText
= String.Format("Name = {0} {1}\r\n" +
"Gender = {2}\r\n" +
"Birth date = {3}\r\n" +
"Birth place = {4}\r\n" +
"Death date = {5}\r\n" +
"Death place = {6}"
, individual.name.givenName
, individual.name.surname
, genderOut
, individual.birth.date
, individual.birth.place
, individual.death.date
, individual.death.place);
textBox1.AppendText(displayText);
}
}
然后您需要更改上面我的代码中的行,如下所示:
public class Individual
{
// ... your code
public string DisplayName
{
get { return String.Format("{0} {1}), name.givenName, name.surname; }
}
// ... the rest of your code
}
listBox1.DisplayMember = "name";
为此:
listBox1.DisplayMember = "DisplayName";
最后一点注意:您可能应该使用“上驼峰大小写”作为属性名。这意味着它们以大写字母开头,然后每个单词的第一个字母也是大写字母。例如,
name.givenName
应该是name.givenName
。这是一个广泛使用的约定。您的代码在什么方面不起作用?你真正的问题是什么?@Robbie这个代码有效,但这是我用来将内容传递到列表框的代码。我想添加更多内容,这样我可以单击列表框项目,该项目的详细信息将显示在文本框中非常感谢,问题是,我从代码中收到一条错误消息,说“对象引用未设置为对象的实例”。该错误消息位于“string genderOut=(individual.gender=”M“?”行中:“男性”:“女性”;“怎么办?”?谢谢大家!@用户1290653很高兴听到这个消息。记住,如果我的帖子对你有帮助,请接受答案并投票。谢谢