
プログラムの勉強を始めたばかりのものです。
Visual Studio Community 2017 を使用して C# で Windows Form Application を勉強中です。
添付の図のようにForm上にListBoxを配置して、ユーザーがListBoxのアイテムを選択して「▲」「▼」ボタンを押すと、隣接しているアイテムと表示順(index)が入れ替わるようにしたいのですが、indexを書き換える記述方法が分からず悩んでいます。
例えば▲ボタンを押した際のイベントでは
頭の中では下記のような記述をイメージしたのですが
6行目で同じindexが2つになって例外が発生してしまうのかなと‥
そもそも6行目・7行目のようにindexを直接操作する記述が分かりません。
private void buttonUp_Click(object sender, EventArgs e)
{
int ia = listBox1.SelectedIndex;
int ib = listBox1.SelectedIndex -1;
if ( ib < 0 ) return;
listBox1のindex[listBox1.SelectedIndex -1] = listBox1のindex[ia];
listBox1のindex[ia] = listBox1のindex[ib];
}
こちらについて、何かアドバイスをいただけないでしょうか?
よろしくお願いします。m(_ _)m

No.2ベストアンサー
- 回答日時:
No.1です。
button2(DOWN)の方の
if (id >= listBox1.Items.Count - 1) return;
を
if ((id >= listBox1.Items.Count - 1) || (id == -1)) return;
に差し替えて下さい。
めぐみんさん、ご回答ありがとうございます!
こちら試してみて、やりたいことが実現できているのを確認しました!
なるほど、Index情報を格納しておいて、ListBoxのアイテムをクリアして再設定すれば良かったのですね。。
その発想に至らなかったので、目からうろこです。
アイテムはボタンを押せば追加したり削除したりできるようにするつもりなので
動的に要素数を変えられるということでListは丁度今勉強を始めたところでした。
とてもありがたいです。
こちら1つ1つじっくり理解を進めていきたいと思います。
No.1
- 回答日時:
こちらでの検証用のコードです。
ボタン名は変わってますので気をつけて下さい。
(中身だけコピーして)
private List<string> lst;
private void Form1_Load(object sender, EventArgs e) // 検証用
{
listBox1.Items.AddRange(new string[] { "リスト1", "リスト2", "リスト3", "リスト4", "リスト5" });
}
private void button1_Click(object sender, EventArgs e) // UP
{
int id = listBox1.SelectedIndex;
if (id <= 0) return;
lst =new List<string>(listBox1.Items.Cast<string>().ToList());
listBox1.Items.Clear();
string st = lst[id - 1];
lst.RemoveAt(id - 1);
lst.Insert(id , st);
listBox1.Items.AddRange(lst.ToArray());
}
private void button2_Click(object sender, EventArgs e) // DOWN
{
int id = listBox1.SelectedIndex;
if (id >= listBox1.Items.Count - 1) return;
lst = new List<string>(listBox1.Items.Cast<string>().ToList());
listBox1.Items.Clear();
string st = lst[id + 1];
lst.RemoveAt(id + 1);
lst.Insert(id, st);
listBox1.Items.AddRange(lst.ToArray());
}
LISTクラスに一旦アイテムを保管し、クリアしたリストボックスに再設定してます。
ご参考になれば良いですが。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C# ListBoxのインデックスの値...
-
getStringの値がNULLの時の処理
-
jsp/Servletの動的に増えるフォ...
-
ORA-01858: 数値を指定する箇所...
-
BOOL値を逆にしたい
-
テキストフィールドに何も入れ...
-
Java配列でNullPointerExceptio...
-
配列にnullを代入すると、null...
-
StrutsでJSPからListを受け取り...
-
JSPやサーブレットでSystem.out...
-
System.err. printlnとSystem.o...
-
eclipseに記述したjavaファイル...
-
System.out.printlnの出力先
-
javaで判別式のプログラミング...
-
JSPでImportエラーになります
-
EclipseでJava
-
プログラミングの問題です。大...
-
Java Struts ~に対するゲッタ...
-
Log4jで機能毎に別ファイルへ出...
-
九九を横に表示する。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ORA-01858: 数値を指定する箇所...
-
jsp/Servletの動的に増えるフォ...
-
BOOL値を逆にしたい
-
C# ListBoxのインデックスの値...
-
配列にnullを代入すると、null...
-
例外でBeanUtils.populateが、...
-
getStringの値がNULLの時の処理
-
Java配列でNullPointerExceptio...
-
eclipseでoracle接続時のエラー...
-
C#でラジオボタンとコンボボッ...
-
「null」と「""」は同じ?
-
javaの掲示板について
-
if文を通らない
-
空欄のテキストフィールドの判...
-
boolean型ではなくて
-
入力された文字列の制限
-
mysqlへの接続が出来ません
-
逆コンパイルの見方について(...
-
postgresql接続時
-
JSPでの画面表示の方法
おすすめ情報