質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

3回答

387閲覧

C#のオブジェクト指向について

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2020/06/12 00:46

前提・実現したいこと

質問失礼いたします。
c#にてCSVフィルを読み込むところまではできました。(項目はid,name,ageです。)
そこから項目nameだけを抽出してlistboxに表示しています。
ここからがわからない点なのですが、listboxに表示されている例えばAさんのnameを選択すると、Aさんのidとageが表示されるようにしたいです。メインクラスとはまた別のクラスとして"Person"というクラスを作ったのはいいものの、オブジェクト指向への理解が足りておらず、どう書いていいかわかりません。こういう風に進めていけばいいよというアドバイスがあればぜひいただきたいです。(当方C#初心者です。漠然とした情報ではありますがどうかよろしくお願いいたします。)
■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

該当のソースコード

試したこと

補足情報(FW/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

csvファイルを読んで、そのままnameだけを抽出してListBoxに設定するのではなく、csvファイルを読んで、一人分のid, name, ageを持つPersonクラスのオブジェクトを生成、それをPersonを要素とするListなりArrayなりに追加していく、という処理に変更する。
その後、ListBoxにはPersonオブジェクト自体を登録してDisplayMemberにnameを指定すれば……って、これはWinFormsの場合ですね。GUIが何か書かれていないのでこれ以上は書けません。

投稿2020/06/12 01:18

Daregada

総合スコア11990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Daregada

2020/06/12 01:19

って書いてるうちに同じ内容の回答が先にあったわ。
退会済みユーザー

退会済みユーザー

2020/06/12 01:25

ListBoxへの追加の仕方はとても参考になりました。ありがとうございます。 Personを要素とするArryとはどういうことでしょうか? 知識が足らずすみません。
Daregada

2020/06/12 01:30

Personの配列を作って、その要素にPersonのオブジェクトを設定してください、ということです。
guest

0

class Person{ protected string id; protected string name; protected int age; }

のようなクラスを作成。
このクラスを利用して、コレクションを作成して、csvファイルからデータを一行取り出すたびに作成したコレクションにaddをする。
あとはデータの入ったコレクションをご自由にどうぞという形になります。

一回だめもとで自分なりにやってみましょう。エラーが出ればここで質問すればいいわけですし。やってだめになってから質問したほうが記憶に残りやすいです。。。

投稿2020/06/12 01:02

Mashiro

総合スコア654

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/06/12 01:07

わかりました。とりあえずやってみます。 つたない質問でしたが、回答いただきありがとうございます。
fana

2020/06/12 01:15

why "protected"?
guest

0

ベストアンサー

説明は面倒なんで、いきなりコードからいきます。
フォームデザイナから、リストボックスにSelectedIndexChangedのイベントハンドラを追加してください。

C#

1using System; 2using System.Collections.Generic; 3using System.Windows.Forms; 4 5namespace WindowsFormsApp1 6{ 7 public partial class Form1 : Form 8 { 9 public class Person 10 { 11 public string ID { get; set; } 12 public int Age { get; set; } 13 public string Name { get; set; } 14 } 15 16 public Form1() 17 { 18 InitializeComponent(); 19 20 var persons = new List<Person>() 21 { 22 new Person(){ ID = "AAA", Age = 10, Name = "Test1" }, 23 new Person(){ ID = "BBB", Age = 20, Name = "Test2" }, 24 new Person(){ ID = "CCC", Age = 30, Name = "Test3" }, 25 }; 26 27 listBox1.DisplayMember = "Name"; //ListBoxに表示するPersonのメンバ 28 listBox1.ValueMember = "this"; //ListBox.SelectedValueに設定されるPersonのメンバ(Person自身を返したいのでthis) 29 listBox1.DataSource = persons; //ListBox表示に使用するデータ 30 } 31 32 private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 33 { 34 var person = (Person)listBox1.SelectedValue; //SelectedValueからPersonを取り出す 35 MessageBox.Show($"ID:{person.ID} Age:{person.Age} Name:{person.Name}"); 36 } 37 } 38}

投稿2020/06/12 01:56

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/06/12 02:30

わざわざありがとうございます。 いただいたコードを自分なりに解釈できるように頑張ります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問