내 ListBox에서 특정 항목을 가져 와서 txt 상자에 표시하는 방법

Nov 17 2020

저는 현재 사용자가 ID 번호를 선택할 수있는 프로그램을 만들고 있으며 사용자가 목록 상자에서 선택한 번호는 세 개의 개별 txt 상자에 이름, 성 및 취미를 표시합니다. ID, 이름 및 취미에서 얻은 데이터는 모두 csv 파일에서 읽습니다. txt 상자에 원하는 데이터를 표시하기 위해 하나의 ID를 정확히 선택하는 방법은 무엇입니까?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace StudentInformation
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        List<ID> events = new List<ID>();
        private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

        private void Form1_Load(object sender, EventArgs e)
        {
            string[] lines = System.IO.File.ReadAllLines("class.csv");
            {
                foreach(var line in lines)
                {
                    String[] words = line.Split(',');
                    string Id = words[0];
                    string last = words[1];
                    string first = words[2];
                    string hobby = words[3];
                    listBox1.Items.Add(last);
                    double.Parse(listBox1.SelectedItems) == 
                }
            }
        }
    }
}

두 번째 파일

using System;
using System.Collections.Generic;
using System.Text;

namespace StudentInformation
{
    class ID
    {
        string Id;
        string FirstName;
        string LastName;
        string Hobby;
        public ID(string eId,string eFirstName, string eLastName, string eHobby)
        {
            Id = eId;
            FirstName = eFirstName;
            LastName = eLastName;
            Hobby = eHobby;
        }
        public override string ToString() => $"{Id}";
    }
}

답변

2 TheLemon Nov 17 2020 at 23:06

백엔드에 사전을 설정할 수 있습니다. 드롭 다운에서 선택한 항목이 Dictionary <string, ID> (csv 구문 분석시 설정)의 키가됩니다.

그런 다음 목록 상자 색인에서 코드를 변경하면 다음과 같이 할 수 있습니다.

if(string.IsNullOrWhiteSpace(listbox1.Text))
   {
           //clear textboxes here
    }
  else
  {
       var student = studentDictionary[listbox1.Text];
       //populate textboxes here
   }

그러나 약간의 일반적인 코딩 팁은 클래스 및 개체 명명 규칙에 따라 작동합니다. 클래스 이름을 'ID'로 지정하지 마십시오. 클래스가 ID를 나타내더라도 ID가 모든 곳에서 속성으로 사용되므로 더 구체적으로 지정하십시오. 이 프로젝트에 대해 얼마나 관심이 있는지에 따라 csv를 사전에로드 할 때 중복 학생, 빈 값이있는 학생 또는 빈 csv 행이로드되지 않았는지 확인하기 위해 몇 가지 검사를 수행 할 수도 있습니다. ID를 공용 클래스로 만들고 필드도 공용으로 만듭니다.

편집하다:

dropdownstyle dropDownList를 사용하여 콤보 상자로 전환하는 것을 고려할 수도 있습니다. 상황에 더 적합 할 수 있습니다.

KyleWang Nov 18 2020 at 01:49

을 정의하고 List<ID>LINQ를 통해 해당 항목을 쿼리 할 수 있습니다 .

게다가 클래스에 해당 속성을 정의해야합니다 ID.

class ID
{
    public string Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Hobby { get; set; }

    public ID(string eId, string eFirstName, string eLastName, string eHobby)
    {
        Id = eId;
        FirstName = eFirstName;
        LastName = eLastName;
        Hobby = eHobby;
    }
}

다음은 LINQ를 사용한 간단한 데모입니다.

// list to store all items
List<ID> iDs = new List<ID>();

private void Form1_Load(object sender, EventArgs e)
{
    // get data from csv
    string[] lines = System.IO.File.ReadAllLines("class.csv");
    {
        foreach (var line in lines)
        {
            String[] words = line.Split(',');
            string Id = words[0];
            string last = words[1];
            string first = words[2];
            string hobby = words[3];
            // add items to list
            iDs.Add(new ID(Id, last, first, hobby));
            // add ids to listbox
            listBox1.Items.Add(Id);
        }
    }
}

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    // LINQ query
    ID id = iDs.Where(x => x.Id == listBox1.Text).FirstOrDefault();
    tblast.Text = id.LastName;
    tbfirst.Text = id.FirstName;
    tbhobby.Text = id.Hobby;
}