現在Visual Studio 2008を使用しているC#デスクトップアプリケーションをサポートしています。"ListView"の "TopItem"プロパティを割り当てるC#/ Visual Studio 2008が動作しません。
私は3000以上のアイテムで構成された "リストビュー"を持っています。この多数の項目のために、ユーザーが入力を開始し、一致する "ListView"項目を "ListView"の先頭にスクロールさせるために、 "TextBox"を作成しました。
私はこれをどのように達成することができるかについての多くの記事を見てきました。問題は、この要件を達成したと思われるものが一貫して機能しません。 "ListView"には "Groups"とプロパティ "ShowGroups"が "false"に設定されていません。私は "ShowGroups"プロパティの "true"を読んで問題を引き起こす可能性があります。
私がこのタスクを達成するはずのコードは次のとおりです。
private void txtSearchCompany_TextChanged(object sender, EventArgs e)
{
// Call FindItemWithText with the contents of the textbox.
ListViewItem foundItem =
lvCompany.FindItemWithText(txtSearchCompany.Text, true, 0, true);
if (foundItem != null)
{
lvCompany.TopItem = foundItem;
}
}
私はコードを踏んできましたが、割り当てステートメントは時折しか動作しないという事実に惑わされています。
たとえば、「TextBox」に「02」と入力すると、代入文のブレークポイントと代入文を実行する前の値が表示されます。
lvCompany.topItem {テキスト= "00000"}
foundItem代入文の後すぐ値{テキスト= "02057"}
。
lvCompany.topItem {テキスト= "01563"}
foundItem {テキスト= "02057"}
なぜ「lvCompany.TopItem」を「01563」に設定されるであろう? ??
"TextBox"に "02"と入力した後の "ListView"です。 "ListView"の一番上の項目には "02"がありません。 「TopItem」は「01563」である。
視覚的なリストビューの上部に02057を置くのに十分な行が02057の下にありますか?そうでない場合は、リストビューを表示可能なビューの一番下に塗りつぶすのに十分な行がある場合にのみ、02057は上に移動します。 –
はい、 "02057"は合計10,767行の行311です(私が思っていた以上に)。"ListView"は固定サイズで最大20行を表示します。したがって、なぜ私は "02057"が上にスクロールせず、 "01563"が混乱するのですか? – Dsjohn