0

私はしばらくの間ListViewsに苦労しています...私はここにコピーできないプログラムを書いています(それは637行の長さです)...基本的に私はListViewの選択された行を削除しようとしています...しかしListViewは、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」とプログラムを追跡するスクロールバーを表示するのに十分な大きさです。実際には完全にクラッシュすることはありませんが、醜いJITデバッグウィンドウが表示されます。問題はListViewのサイズにあることはわかっています。アクティブなスクロールバーを使用してListViewのアイテムを削除しようとするとクラッシュしますが、ウィンドウのサイズを変更して無効にするのに十分な大きさにすると、スクロールバー(つまり、すべてが収まるように十分な大きさであり、スクロールバーは必要ないため、システムはスクロールバーを作成しません)、すべてが正常に機能します!

(選択したアイテムを削除するためにすでにすべての種類のコードを試しましたが、すべてのコードで同じエラーが発生しましたが、すべてのListViewを配列にコピーし、配列内の選択したアイテムを削除してからコピーすることで機能しました。きれいなListViewに戻る....奇妙で、乱雑で、醜い、私は知っていますが、それが機能した唯一のコードでした...しかし今、私はプログラムをインストールした後にのみこれと同じバグを受け取ります、これは私がVisual Studioでプログラムを実行してください!)

編集:削除コードは次のとおりです(コメント部分は、以前に試したすべてのコードであり、同じバグで失敗しました...これは、Visual Studio 2010ではなく、インストールされたときにのみクラッシュします...フレームワークは.NET 4.0です):

private void limparLinhasSelecionadas() 
        {
            if (listView1.Items.Count > 0 && limpando == false)
            {
                limpando = true;
                int i = 0; 

                //for (i = listView1.Items.Count - 1; i >= 0 ; i--)
                //{
                    //if (listView1.Items[i].Selected == true)
                    //{
                    //    listView1.Items[i].Remove();                       
                    //}

                //}              
                //////for (i = listView1.SelectedIndices.Count - 1; i >= 0; i--)
                //////{
                //////    listView1.Items[listView1.SelectedIndices[i]].Remove();
                //////}
                //foreach (ListViewItem item in listView1.SelectedItems)
                //{
                //    listView1.Items.Remove(item);
                //}

                ArrayList itens = new ArrayList();

                foreach (ListViewItem item in listView1.Items)
                {
                    itens.Add(item);
                }

                foreach (ListViewItem item in listView1.SelectedItems)
                {
                    itens.Remove(item);                    
                }

                listView1.Items.Clear();

                foreach (ListViewItem item in itens)
                {
                    listView1.Items.Add((ListViewItem)item.Clone());
                }

                //for (i = 0; i < itens.Count; i ++)
                //{                    
                //    ListViewItem item = new ListViewItem((itens[i] as ListViewItem).Text);

                //    for (j = 1; j < (itens[i] as ListViewItem).SubItems.Count; j++)
                //    {
                //        item.SubItems.Add((itens[i] as ListViewItem).SubItems[j].Text);                     
                //    }
                //    listView1.Items.Add(item);
                //}

                for (i = 0; i < listView1.Items.Count; i++)
                {
                    listView1.Items[i].Text = "Passe " + (i + 1).ToString();
                }

                ////ListView listView = new ListView();

                ////int j = 0;

                ////for (i = 0; i < listView1.Items.Count; i++)
                ////{
                ////    //listView.Items.Add(listView1.Items[i]);
                ////    for (j = 0; j < listView1.Items[i].SubItems.Count; j++)
                ////    {
                ////        listView.Items[i].SubItems.Add(listView1.Items[i].SubItems[j].Text);
                ////    }
                ////}

                ////listView1.Items.Clear();

                ////for (i = 0; i < listView.Items.Count; i++)
                ////{
                ////    listView1.Items.Add(listView.Items[i].Clone() as ListViewItem);
                ////}

                //foreach (ListViewItem item in listViewCollection)
                //{
                //    listView1.Items.Add(item.Clone() as ListViewItem);
                //}

                SetWindowTheme(listView1.Handle, "Explorer", null);
                limpando = false;
            }

           // SetWindowTheme(listView1.Handle, "Explorer", null);
        }
4

1 に答える 1

1

選択したアイテムをリストビューから削除するだけの場合は、このコードが機能します。

foreach (ListViewItem item in listView1.SelectedItems)
{
    listView1.Items.Remove(item);
}
于 2012-06-21T12:01:25.613 に答える