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

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

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

Re[4]: リストボックスから削除する


(過去ログ 83 を表示中)

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

■49219 / inTopicNo.1)  リストボックスから削除する
  
□投稿者/ かつ (1回)-(2010/04/27(Tue) 13:04:10)

分類:[C#] 

C#です。
リストボックスにファイルをドラッグアンドドロップした時に、ワードファイル以外を除外したいと考えています。
下記のようにしてみましたが、複数をドラッグアンドドロップした場合に、1つだけ不要なリストが残ってしまいます。
これを解決するにはどうすればよいでしょうか?

for (int i = 0; i <= listBox1.Items.Count - 1; i++)
{
if (Path.GetExtension(listBox1.Items[i].ToString()) != ".doc")
{
listBox1.Items.RemoveAt(i);
i = 0;
}

ご存知の方がいらっしゃいましたら、ご教示ください。
引用返信 編集キー/
■49220 / inTopicNo.2)  Re[1]: リストボックスから削除する
□投稿者/ door (2回)-(2010/04/27(Tue) 13:22:24)

if内で、
> listBox1.Items.RemoveAt(i);
> i = 0;
この記述がありますが、
このあとにiがインクリメントされる(i++)されるのかと。
それで、自らRemoveAtしているので、
インデックスがずれていくのかな、と。
(つまり、最初のアイテムが削除対象だとすると、当初[1]にあったアイテムは判断対象にならない。)

パッと見ですが。


No49219 (かつ さん) に返信
> C#です。
> リストボックスにファイルをドラッグアンドドロップした時に、ワードファイル以外を除外したいと考えています。
> 下記のようにしてみましたが、複数をドラッグアンドドロップした場合に、1つだけ不要なリストが残ってしまいます。
> これを解決するにはどうすればよいでしょうか?
>
> for (int i = 0; i <= listBox1.Items.Count - 1; i++)
> {
> if (Path.GetExtension(listBox1.Items[i].ToString()) != ".doc")
> {
> listBox1.Items.RemoveAt(i);
> i = 0;
> }
>
> ご存知の方がいらっしゃいましたら、ご教示ください。
引用返信 編集キー/
■49222 / inTopicNo.3)  Re[2]: リストボックスから削除する
□投稿者/ nori (103回)-(2010/04/27(Tue) 14:02:42)
後ろから検索した方が簡単だと思いますよ。

つfor (int i = listBox1.Items.Count - 1; i >=0 ; i--)
引用返信 編集キー/
■49223 / inTopicNo.4)  Re[2]: リストボックスから削除する
□投稿者/ かつ (2回)-(2010/04/27(Tue) 14:04:51)
            for (int i = 0; i < listBox1.Items.Count ; i++)
            {
                if (Path.GetExtension(listBox1.Items[i].ToString()) != ".doc")
                {
                    listBox1.Items.RemoveAt(i);
                    i = 0;
                }
            }
            if (Path.GetExtension(listBox1.Items[0].ToString()) != ".doc")
            {
                listBox1.Items.RemoveAt(0);
                
            }

上記のように、listBox1.Items[0]のみ別で判定するようにすれば、解決ですが、あまりきれいではないですね。
もっと精進します。ありがとうございました。

解決済み
引用返信 編集キー/
■49225 / inTopicNo.5)  Re[3]: リストボックスから削除する
□投稿者/ みきぬ (879回)-(2010/04/27(Tue) 14:37:12)
どうしても先頭から処理したいのなら。

for (int i = 0; i < listBox1.Items.Count; )
{
    if (Path.GetExtension(listBox1.Items[i].ToString()) != ".doc")
    {
        listBox1.Items.RemoveAt(i);
    }
    else
    {
        i++;
    }
}

解決済み
引用返信 編集キー/
■49226 / inTopicNo.6)  Re[3]: リストボックスから削除する
□投稿者/ nori (104回)-(2010/04/27(Tue) 14:51:39)
>上記のように、listBox1.Items[0]のみ別で判定するようにすれば、解決ですが、あまりきれいではないですね。
>もっと精進します。ありがとうございました。
それだと、forでItemsの中が空になった場合listBox1.Items[0]で落ちますよ。
解決済み
引用返信 編集キー/
■49227 / inTopicNo.7)  Re[4]: リストボックスから削除する
□投稿者/ かつ (3回)-(2010/04/27(Tue) 15:09:23)
>>みきぬさん、noriさん、doorさん
いろいろとご教授いただきましてありがとうございました。
前からする必要もありませんので、みきぬさんの方法でいきたいと思います。
for (int i = listBox1.Items.Count - 1; i >=0 ; i--)

ありがとうございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -