2012-02-21 8 views
1

私はListViewを.NETのフォームに置いています。WinForms ListViewフォームが非表示になってからSelectedIndicesが空です。

フォームが隠されている前SelectedIncidesが存在し、有効である:

void buttonOK_click() 
{ 
    Assert(listView.SelectedIndices.Count > 0); 
    DialogResult = DialogResult.OK; 
} 

しかし、モーダルフォームが戻った後:

form1.ShowDialog(); 
Assert(form1.listView.SelectedIndices.Count > 0); 

この第二アサーションが失敗しました。

ListViewSelectedIndicesは、リストビューが表示されていればどのように表示されますか(破棄されていないか、廃棄されていません)。

+4

フォームが閉じているため、 'SelectedIndices'コレクションは変更できません。私はあなたが解雇されているかもしれない他の出来事をチェックし、アイテムを選択解除することをお勧めします。 'ShowModal'では' ShowDialog'を意味します - モーダルダイアログを表示しますか? –

+1

別のユーザーが選択した項目に問題がありました。 (http://stackoverflow.com/questions/304844/why-do-selectedindices-and-selecteditems-not-work-when-listview-is-instantiated) – Steve

答えて

1

選択したインデックスのList(または同等のもの)を保持するform1にパブリック変数を設定してみることはできますか?フォーム1をフォームクローズイベントに設定してください。コントロールを元のフォームに戻すと、代わりにそのフォームにアクセスできますか?

+0

私はこの正確な解決策を実行しませんでしたが、それを機能させるために同様にクルージーなハックを行いました。 –

+0

私は数ヶ月前にこの正確な問題を解決しなければなりませんでしたが、私たちのどちらもより良い方法を見つけられませんでした! – Bridge

1

フリーウェアコンポーネントBetter ListView Expressまたは完全な本物のBetter ListViewを試すことができます。ここではSelectedIndicesの問題と、その他の既知の.NET ListViewの既知のバグを解決しました。

+0

またはObjectListView、または他のサードパーティのコントロール。 –

+0

さて、ObjectListViewは.NET ListViewラッパーです。そのため、いくつかの欠陥が継承され、そのオブジェクトモデルはかなり異なっています(再学習する必要があります)。他のサードパーティのコントロールも元のListViewインターフェイスから逸脱する可能性があります。しかし、これらはSelectedIndicesの問題を修正した可能性のある代替案です。 – Libor

関連する問題