C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: リストボックスのIndexを取得したいのですが・・・


(過去ログ 131 を表示中)

[トピック内 11 記事 (1 - 11 表示)]  << 0 >>

■77267 / inTopicNo.1)  リストボックスのIndexを取得したいのですが・・・
  
□投稿者/ ミーアキャット (25回)-(2015/10/02(Fri) 12:28:25)

分類:[.NET 全般] 

たとえば、
リストボックスに以下の順番でデータを入れました。

listBox1.Items.Add("A");
listBox1.Items.Add(1);
listBox1.Items.Add("B");
listBox1.Items.Add("1");

このデータのインデックスを取得するために
以下のような関数を作ったのですが
うまく動きませんでした。

private int GetIndex(object obj)
{
 for(int inum = 0; inum < listBox1.Items.Count; inum++)
 {
  if(listBox1.Items[inum] == obj) return (inum);
 }
 return (-1);
}

ちなみに、リストボックスはデータが見えるために使ったのですが
データを保存するためだけなので object[] でもいいのですが
他に良い方法があれば合わせてお願いします。
引用返信 編集キー/
■77268 / inTopicNo.2)  Re[1]: リストボックスのIndexを取得したいのですが・・・
□投稿者/ WebSurfer (663回)-(2015/10/02(Fri) 13:11:33)
No77267 (ミーアキャット さん) に返信

何を作っているか(Windows Forms?, WPF? ASP.NET Web Forms? その他)を
書いていただけませんか。

あと、ご自分の開発環境(OS, .NET, Visual Studio のバージョンなど)も。

それらを回答者の想像に任せるという訳ではないですよね?
引用返信 編集キー/
■77269 / inTopicNo.3)  Re[2]: リストボックスのIndexを取得したいのですが・・・
□投稿者/ ミーアキャット (26回)-(2015/10/02(Fri) 13:49:56)
No77268 (WebSurfer さん) に返信
> 何を作っているか(Windows Forms?, WPF? ASP.NET Web Forms? その他)を
> 書いていただけませんか。
Windows Forms です。

>
> あと、ご自分の開発環境(OS, .NET, Visual Studio のバージョンなど)も。
>
OS Windows7
.Net 4
VisualStudio 2013

です。
よろしくお願いします。
引用返信 編集キー/
■77270 / inTopicNo.4)  Re[3]: リストボックスのIndexを取得したいのですが・・・
□投稿者/ ゼット (1回)-(2015/10/02(Fri) 15:21:13)

> if(listBox1.Items[inum] == obj) return (inum);

これはC#でいいんですよね。

C#の知識はあまりないのですが、
objってobject型だから、==演算子では参照の比較を行っているのでは?
stringにキャストしたもので比較してみてはどうですか?

if((string)listBox1.Items[inum] == (string)obj) return (inum);

的を外していたらゴメンナサイ。
引用返信 編集キー/
■77271 / inTopicNo.5)  Re[3]: リストボックスのIndexを取得したいのですが・・・
□投稿者/ WebSurfer (664回)-(2015/10/02(Fri) 15:26:27)
No77269 (ミーアキャット さん) に返信

ListBox.ObjectCollection.IndexOf メソッドという、質問者さんの目的にずばり合っている
と思われるメソッドがライブラリに用意されていますが、それは使えないのですか?

ListBox.ObjectCollection.IndexOf メソッド
https://msdn.microsoft.com/ja-jp/library/vstudio/system.windows.forms.listbox.objectcollection.indexof(v=vs.100).aspx

使えない場合、どういうところが目的に合わないのでしょうか?
引用返信 編集キー/
■77283 / inTopicNo.6)  Re[4]: リストボックスのIndexを取得したいのですが・・・
□投稿者/ ミーアキャット (27回)-(2015/10/05(Mon) 08:58:16)
No77270 (ゼット さん) に返信
>
> if((string)listBox1.Items[inum] == (string)obj) return (inum);
>
回答ありがとうございます。
この場合、 1 も "1" の場合も同じなので、 最初に登録されている
1 が選択されてしまいます。

引用返信 編集キー/
■77284 / inTopicNo.7)  Re[5]: リストボックスのIndexを取得したいのですが・・・
□投稿者/ 魔界の仮面弁士 (516回)-(2015/10/05(Mon) 09:31:30)
No77267 (ミーアキャット さん) に返信
> ちなみに、リストボックスはデータが見えるために使ったのですが
> データを保存するためだけなので object[] でもいいのですが
可視化する必要が無いのなら
 private ArrayList items = new ArrayList();
もしくは
 private List<dynamic> items = new List<dynamic>();
とか。


No77283 (ミーアキャット さん) に返信
>>if((string)listBox1.Items[inum] == (string)obj) return (inum);

((object)1) == ((object)1) は false を返します。


> この場合、 1 も "1" の場合も同じなので、 最初に登録されている
> 1 が選択されてしまいます。

これでどうでしょう。

if (listBox1.Items[inum].Equals(obj)) return inum;


もしくは No77221 で紹介されているメソッドとか。
 private int GetIndex(object obj)
 {
  return listBox1.Items.IndexOf(obj);
 }
ただしこの場合、GetIndex(null) のような呼び出しはできません。
とはいえ、そもそも ListBox に null は格納できないので、問題にはならないでしょう。
引用返信 編集キー/
■77285 / inTopicNo.8)  Re[4]: リストボックスのIndexを取得したいのですが・・・
□投稿者/ PANG2 (89回)-(2015/10/05(Mon) 09:32:59)
if(object.Equals(listBox1.Items[inum], obj)) return (inum);

2つの値が等しいか調べる、等値演算子(==)とEqualsメソッドの違い
http://dobon.net/vb/dotnet/beginner/equality.html

とはいえ、他の回答にあるように

listBox1.Items.IndexOf(obj);

で充分では?

引用返信 編集キー/
■77287 / inTopicNo.9)  Re[6]: リストボックスのIndexを取得したいのですが・・・
□投稿者/ ミーアキャット (28回)-(2015/10/05(Mon) 16:55:12)
すみません。

最終的に object[] にしようとしていたので
indexof が使えないので、ループで処理するように
してしまいました。

さらに、ListBox.ObjectCollection.IndexOf というのが
みつからなかったのでさらに迷宮に入ってしまいました。
listBox1.Items.IndexOf(obj) ですよね。
ループの中でどうやって使うのか考えていました。


No77284 (魔界の仮面弁士 さん) に返信

List<dynamic> にしてIndexOfを使えば問題解決しました。

お騒がせしました。

解決済み
引用返信 編集キー/
■77288 / inTopicNo.10)  Re[7]: リストボックスのIndexを取得したいのですが・・・
□投稿者/ WebSurfer (666回)-(2015/10/05(Mon) 17:06:28)
No77287 (ミーアキャット さん) に返信

> さらに、ListBox.ObjectCollection.IndexOf というのが
> みつからなかったのでさらに迷宮に入ってしまいました。

見つからないならすぐにそう言っていただいた方が、返事をされないより
良いと思うのですが・・・ 掲示板での一般的なマナー的にも。
解決済み
引用返信 編集キー/
■77292 / inTopicNo.11)  Re[7]: リストボックスのIndexを取得したいのですが・・・
□投稿者/ PANG2 (90回)-(2015/10/05(Mon) 18:58:08)
No77287 (ミーアキャット さん) に返信
> すみません。
>
> 最終的に object[] にしようとしていたので
> indexof が使えないので、ループで処理するように
> してしまいました。

Array.IndexOf で出来ますけどね。

object[] items = {"A", 1, "B", "1" };

Debug.WriteLine(Array.IndexOf(items, "A"));
Debug.WriteLine(Array.IndexOf(items, 1));
Debug.WriteLine(Array.IndexOf(items, "B"));
Debug.WriteLine(Array.IndexOf(items, "1"));

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -