プログラムの勉強を始めたばかりのものです。
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も見ています
-
「どうして捨てられないの?」前妻の物を捨てられない男性の心理って?
前妻の物を捨てられない理由に加え、捨てるための手段はあるのかを専門家に聞いてみた!
-
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
ListBoxで改行したい
Visual Basic(VBA)
-
C# ListBoxのアイテムをユーザーが直接リネームできるようにすることは可能ですか?
C言語・C++・C#
-
-
4
listboxの並び替え
Visual Basic(VBA)
-
5
チェックした値を取得したい(CheckedListbox)。
Visual Basic(VBA)
-
6
CloseとDisposeの違い
Visual Basic(VBA)
-
7
DataGridViewのチェックボックスのON、OFFの判定方法
C言語・C++・C#
-
8
インスタンス参照でアクセスできない。代わりに型名?
C言語・C++・C#
-
9
C#で動的配列Listの中身をListBoxに表示するには
C言語・C++・C#
-
10
C# Form上に配置されたコントロールに重なるように透過GIF(PNG)を表示したい
C言語・C++・C#
-
11
大量のデータを読み込んで表示する速度を改善したい
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ORA-01858: 数値を指定する箇所...
-
配列にnullを代入すると、null...
-
Java配列でNullPointerExceptio...
-
eclipseでoracle接続時のエラー...
-
jsp/Servletの動的に増えるフォ...
-
BOOL値を逆にしたい
-
JSPによる画面間のパラメータの...
-
onbeforeunloadでnullを返すとI...
-
gas カレンダー祭日設定でエラー
-
Javascript エラーメッセージが...
-
C言語のポインターに関する警告
-
JSPやサーブレットでSystem.out...
-
ループ処理の際、最後だけ","を...
-
[JAVA]try 内の変数を外で!?
-
オブジェクトの中のプロパティ...
-
VBAで配列の計算
-
Path型をString型へ変換する(Java)
-
カタカナの小文字を大文字に変...
-
System.err. printlnとSystem.o...
-
SwingでJtableのヘッダ行が表示...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ORA-01858: 数値を指定する箇所...
-
配列にnullを代入すると、null...
-
Java配列でNullPointerExceptio...
-
BOOL値を逆にしたい
-
getStringの値がNULLの時の処理
-
C# ListBoxのインデックスの値...
-
eclipseでoracle接続時のエラー...
-
例外でBeanUtils.populateが、...
-
jsp/Servletの動的に増えるフォ...
-
Stringを返す getText()メソッ...
-
gas カレンダー祭日設定でエラー
-
JSPでの画面表示の方法
-
空欄のテキストフィールドの判...
-
JSPで複数のSQL実行につ...
-
逆コンパイルの見方について(...
-
C#でラジオボタンとコンボボッ...
-
Safari ダウンロード時に日本語...
-
java DAO 日付指定フォーマット...
-
oracle10g java jdbc 大量inser...
-
MySQLのテーブル名を変数に置い...
おすすめ情報