
プログラムの勉強を始めたばかりのものです。
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で質問しましょう!
似たような質問が見つかりました
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) ExcelVBAで、index、match関数を使用して、指定範囲に出力したい 3 2022/10/18 21:53
- Excel(エクセル) エクセルでエラーを無視して一番左側のセルの値を返したい 2 2023/07/27 13:06
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- Visual Basic(VBA) RemoveDuplicatesメソッドについて教えてください。 シート1にシート2から値をもってく 1 2023/02/28 22:43
- Excel(エクセル) エクセルからスプレッドシートに数式を移植で起こるエラーについて。 2 2023/08/05 10:56
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- JavaScript 画像の表示位置 3 2022/12/23 08:25
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ORA-01858: 数値を指定する箇所...
-
jsp/Servletの動的に増えるフォ...
-
getStringの値がNULLの時の処理
-
C#でラジオボタンとコンボボッ...
-
postgresql接続時
-
例外でBeanUtils.populateが、...
-
eclipseでoracle接続時のエラー...
-
BOOL値を逆にしたい
-
gas カレンダー祭日設定でエラー
-
Java配列でNullPointerExceptio...
-
プログラミングの質問です
-
if文を通らない
-
配列にnullを代入すると、null...
-
java DAO 日付指定フォーマット...
-
System.err. printlnとSystem.o...
-
JSPやサーブレットでSystem.out...
-
ループ処理の際、最後だけ","を...
-
C言語のポインターに関する警告
-
1~100までの数字を表示し、か...
-
javaで質問です。 文字列2023/2...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ORA-01858: 数値を指定する箇所...
-
配列にnullを代入すると、null...
-
BOOL値を逆にしたい
-
getStringの値がNULLの時の処理
-
Java配列でNullPointerExceptio...
-
javaの掲示板について
-
eclipseでoracle接続時のエラー...
-
C#でラジオボタンとコンボボッ...
-
例外でBeanUtils.populateが、...
-
C# ListBoxのインデックスの値...
-
逆コンパイルの見方について(...
-
Tomcatを再起動するとエラーが...
-
空欄のテキストフィールドの判...
-
jsp/Servletの動的に増えるフォ...
-
プログラミングの質問です
-
入力された文字列の制限
-
androidアプリが強制終了してし...
-
if文を通らない
-
サーブレット、JSP、Mysqlについて
-
Stringを返す getText()メソッ...
おすすめ情報