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

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

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

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

Q&A

解決済

1回答

722閲覧

C#で構造体とリストの勉強をしています。

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

1グッド

0クリップ

投稿2018/10/23 08:41

テキストボックス1 にID テキストボックス2に名前 を入れて実行ボタンを押すと構造体Aとなり、2回目以降も追加されるようにListを作りました。
またクリアボタンを押すとテキストボックスの中身がなくなります。
検索ボタン作りテキストボックス1にIDだけを入力し、事前に登録したListから検索しすることができます。

新しく実装したいものが 前と次ボタンを作り、検索で表示されているものの前のデータを各ボタンで前後を表示できるようにしたいです。

また勉強したほうがいいものがあれば教えていただきたいです。

今作っているコードです

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

//構造体を宣言 struct abc { public int ID; public string Name; } //List 宣言 List<abc> list = new List<abc>(); private void button1_Click(object sender, EventArgs e) { //宣言 abc A = new abc(); //AにIDと名前を格納 A.ID = int.Parse(textBox1.Text); A.Name = textBox2.Text; //Aに入力した内容をlistに追加 list.Add(A); } private void kuria_Click(object sender, EventArgs e) { //入力内容をクリア textBox1.ResetText(); textBox2.ResetText(); } private void kensaku_Click(object sender, EventArgs e) { // 宣言 int x = int.Parse(textBox1.Text); //検索 var foundA = list.FirstOrDefault(abc => abc.ID == x ); } private void button3_Click(object sender, EventArgs e) { //これを前にしたい。 }

    private void button4_Click(object sender, EventArgs e)

      //これを後にしたい。

     }

}

}

shakevo👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

以下のような書き方はいかがでしょうか

C#

1public partial class Form1 : Form 2 { 3 public Form1() 4 { 5 InitializeComponent(); 6 } 7 8 //構造体を宣言 9 10 struct abc 11 { 12 public int ID; 13 public string Name; 14 } 15 16 //List 宣言 17 List<abc> list = new List<abc>(); 18 19 private void button1_Click(object sender, EventArgs e) 20 { 21 22 //宣言 23 abc A = new abc(); 24 //AにIDと名前を格納 25 A.ID = int.Parse(textBox1.Text); 26 A.Name = textBox2.Text; 27 28 //Aに入力した内容をlistに追加 29 list.Add(A); 30 } 31 32 private void kuria_Click(object sender, EventArgs e) 33 { 34 //入力内容をクリア 35 textBox1.ResetText(); 36 textBox2.ResetText(); 37 38 } 39 40 private void kensaku_Click(object sender, EventArgs e) 41 { 42 // 宣言 43 int x = int.Parse(textBox1.Text); 44 //検索 45 abc foundA = ListSearchCurrent(x); 46 47 } 48 49 private void button3_Click(object sender, EventArgs e) 50 { 51 // 宣言 52 int x = int.Parse(textBox1.Text); 53 //検索 54 abc foundA = ListSearchPrev(x); 55 } 56 private void button4_Click(object sender, EventArgs e) 57 { 58 // 宣言 59 int x = int.Parse(textBox1.Text); 60 //検索 61 abc foundA = ListSearchNext(x); 62 } 63 64 /// <summary> 65 /// 指定Idのabcを返す 66 /// </summary> 67 /// <param name="pId"></param> 68 /// <returns></returns> 69 abc ListSearchCurrent(int pId) 70 { 71 abc ret = new abc(); 72 73 ret.ID = list[list.FindIndex(abc => abc.ID == pId)].ID; 74 ret.Name = list[list.FindIndex(abc => abc.ID == pId)].Name; 75 76 return ret; 77 } 78 79 /// <summary> 80 /// 指定Idの1つ前のインデックスのabcを返す 81 /// </summary> 82 /// <param name="pId"></param> 83 /// <returns></returns> 84 abc ListSearchPrev(int pId) 85 { 86 abc ret = new abc(); 87 88 ret.ID = list[list.FindIndex(abc => abc.ID == pId) - 1].ID; 89 ret.Name = list[list.FindIndex(abc => abc.ID == pId) - 1].Name; 90 91 return ret; 92 } 93 94 /// <summary> 95 /// 指定Idの1つ後のインデックスのabcを返す 96 /// </summary> 97 /// <param name="pId"></param> 98 /// <returns></returns> 99 abc ListSearchNext(int pId) 100 { 101 abc ret = new abc(); 102 103 ret.ID = list[list.FindIndex(abc => abc.ID == pId) + 1].ID; 104 ret.Name = list[list.FindIndex(abc => abc.ID == pId) + 1].Name; 105 106 return ret; 107 } 108 } 109

 


・ 

以下メソッドから値を取得しています。
上から、

・指定したIDに合致するインデックスからabcを取得する
・指定したIDに合致するインデックス - 1からabcを取得する
・指定したIDに合致するインデックス + 1からabcを取得する

これで1つ前、1つ後も取得できます。

C#

1 /// <summary> 2 /// 指定Idのabcを返す 3 /// </summary> 4 /// <param name="pId"></param> 5 /// <returns></returns> 6 abc ListSearchCurrent(int pId) 7 { 8 abc ret = new abc(); 9 10 ret.ID = list[list.FindIndex(abc => abc.ID == pId)].ID; 11 ret.Name = list[list.FindIndex(abc => abc.ID == pId)].Name; 12 13 return ret; 14 } 15 16 /// <summary> 17 /// 指定Idの1つ前のインデックスのabcを返す 18 /// </summary> 19 /// <param name="pId"></param> 20 /// <returns></returns> 21 abc ListSearchPrev(int pId) 22 { 23 abc ret = new abc(); 24 25 ret.ID = list[list.FindIndex(abc => abc.ID == pId) - 1].ID; 26 ret.Name = list[list.FindIndex(abc => abc.ID == pId) - 1].Name; 27 28 return ret; 29 } 30 31 /// <summary> 32 /// 指定Idの1つ後のインデックスのabcを返す 33 /// </summary> 34 /// <param name="pId"></param> 35 /// <returns></returns> 36 abc ListSearchNext(int pId) 37 { 38 abc ret = new abc(); 39 40 ret.ID = list[list.FindIndex(abc => abc.ID == pId) + 1].ID; 41 ret.Name = list[list.FindIndex(abc => abc.ID == pId) + 1].Name; 42 43 return ret; 44 } 45 } 46

list[list.FindIndex(abc => abc.ID == pId) - 1]

list.FindIndex(abc => abc.ID == pId) … ここで、合致するIDの構造体のインデックス番号を取得します。
その外枠のlist[ ~ ]でインデックス指定してIDとNameの値を取得する、というものです。
その為、FindIndexの値に加算・減算を行えばインデックスの前後を取得することが可能です。


他にも例えばこのメソッドに、引数としてインデックスの前後の足し算引き算のInt値を含めたり
アレンジすることで、色々応用できるかも知れません。
※例えば3つのメソッドを1つにまとめるには?など

頑張ってください!

投稿2018/10/23 09:15

編集2018/10/23 09:23
sujico.net

総合スコア453

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

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

退会済みユーザー

退会済みユーザー

2018/10/24 01:52

ご丁寧にありがとうございます! とても参考になります。 少しずつ学ばせていただきます。
sujico.net

2018/10/24 02:11

よかったです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問