5

プログラムを実行すると、一連の ListView フォームが表示されます。それらの 1 つに (文字列として) 項目を入力し、選択状態が変化したかどうかを確認します。変更したら、FocusedItem.Text を使用して、選択した項目のテキストを取得します。最初は問題なく動作しますが、別の選択が行われると、選択された項目は null として返されます。

この問題を一時的に回避する唯一の方法は、フォームをクリアして再入力することです。欠点は、強調表示された項目が失われることです。これを回避する別の方法が必要です。おそらく、ListView が実際にどのように機能するかについて明確ではないのでしょうか?

何か案は?

4

5 に答える 5

3

次の条件を に入れますOnSelectedIndexHandler

if(listViewObject.SelectedItems!=null&& listViewObject.SelectedItems.Count>0)
{
   //....your code here
}
于 2010-12-28T19:27:41.443 に答える
1

ユーザーが選択したアイテムを探している場合は、SelectedItemsコレクションの最初のアイテムを使用する必要があります。FocusedItem現在キーボード フォーカスがある項目です (したがって、点線のフォーカス四角形が表示されています)。コントロールにフォーカスがない場合、アイテムにもフォーカスできません。

于 2008-11-10T10:33:49.863 に答える
0

テスト プログラムを実行しましたが、FocusedItem が null になる可能性があるインスタンスはありません。

コードを投稿できますか?

アイテム「a」を選択してからアイテム「b」を選択し、空のスペースをクリックすると、次のようになります。

ItemSelectionChanged
    Item         : ListViewItem: {a}
    IsSelected   : True
    SelectedItem : ListViewItem: {a}
    FocusedItem  : ListViewItem: {a}
SelectedIndexChanged
    SelectedItem : ListViewItem: {a}
    FocusedItem  : ListViewItem: {a}
ItemSelectionChanged
    Item         : ListViewItem: {a}
    IsSelected   : False
    SelectedItem : null
    FocusedItem  : ListViewItem: {a}
SelectedIndexChanged
    SelectedItem : null
    FocusedItem  : ListViewItem: {a}
ItemSelectionChanged
    Item         : ListViewItem: {b}
    IsSelected   : True
    SelectedItem : ListViewItem: {b}
    FocusedItem  : ListViewItem: {b}
SelectedIndexChanged
    SelectedItem : ListViewItem: {b}
    FocusedItem  : ListViewItem: {b}
ItemSelectionChanged
    Item         : ListViewItem: {b}
    IsSelected   : False
    SelectedItem : null
    FocusedItem  : ListViewItem: {b}
SelectedIndexChanged
    SelectedItem : null
    FocusedItem  : ListViewItem: {b}

FocusedItem決してnullではないことに気づきました。

あなたの場合も同じですか?

if (listView.FocusedItem == null)あなたの場合、簡単なチェックで十分でしょうか?

于 2008-11-10T06:11:36.883 に答える
0

リストビューの使用中に同じ問題が発生しました。選択時に発生するイベントに問題があるようです。

  1. SelectedIndexChangedフォーカスされたアイテム、選択されたアイテム、および選択されたインデックスが null になるイベント。これが上記の問題の原因です。
  2. ItemActivate イベントは、フォーカスされたアイテム、選択されたアイテム、または選択されたインデックスが 2 回目またはそれ以外の時間に null でない場合に、グリッチなしで代わりに使用できます。

詳細を含むリストビューを作成すると、デフォルトでSelectedIndexChangedイベントが発生します。そのため、それぞれの Designer クラスを変更し、メイン クラスに関連するイベント ハンドラーを配置することで、問題を解決できます。

デザイナー クラスで、サブスクライブされているイベントを確認します。例:

this.TaskslistView.SelectedIndexChanged
      += new System.EventHandler(TaskslistView_SelectedIndexChanged);

それぞれのTaskslistView_SelectedIndexChangedイベント ハンドラー メソッドがメイン クラスに存在します。このイベントを

this.TaskslistView.ItemActivate
      += new System.EventHandler(this.TaskslistView_ItemActivate);

TaskslistView_SelectedIndexChangedそれぞれをに置き換えTaskslistView_ItemActivateます。

これで問題は解決するはずです。

于 2010-03-18T22:16:17.123 に答える