Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单击列表框中的项目并在多行文本框中查看详细信息_C#_Textbox_Listbox - Fatal编程技术网

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很高兴听到这个消息。记住,如果我的帖子对你有帮助,请接受答案并投票。谢谢