2017-12-04 53 views
0

現在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"}

Before assignment statement

lvCompany.topItem {テキスト= "01563"}

foundItem {テキスト= "02057"}

After assignment statement

なぜ「lvCompany.TopItem」を「01563」に設定されるであろう? ??

"TextBox"に "02"と入力した後の "ListView"です。 "ListView"の一番上の項目には "02"がありません。 「TopItem」は「01563」である。

ListView display

+0

視覚的なリストビューの上部に02057を置くのに十分な行が02057の下にありますか?そうでない場合は、リストビューを表示可能なビューの一番下に塗りつぶすのに十分な行がある場合にのみ、02057は上に移動します。 –

+0

はい、 "02057"は合計10,767行の行311です(私が思っていた以上に)。"ListView"は固定サイズで最大20行を表示します。したがって、なぜ私は "02057"が上にスクロールせず、 "01563"が混乱するのですか? – Dsjohn

答えて

0

あなたが目に見える4行のリストビューを持っていることを第二のためにふり。そのリストビューには10行の情報(1〜10)が入力されます。 4行が表示されているので、合計4行以上の行が存在する場合、リストビュー全体を表示するためには7,8,9,10が必要であるため、リストビューは一番上に1から7までしか表示できません。 8はトップに移動できないので、TopItemには、リストビューの上部に実際に表示されているものが含まれます。この場合、7になります。したがって、7,8,9,10は、リストビューがTopItemとして7を表示します。列をさらに上に移動します。

listviewがいっぱいでないか、開始する項目が4つしかない場合も同じことが起こります。だから、同じlistivewを取ってみましょう、それは4つの項目だけを設定しましょう。このため、TopItemは4を下回る他の行がないため、常に1を返します。

+0

はい、意味がありますが、私の場合、 "TopItem"に "02057"行を割り当て、その行を "ListView"の先頭に移動させるのに十分な行があります。 "ListView"は最大20行を表示し、サイズ変更することはできません。行「02057」は10,767行の行311である。私の前のコメントを見てください。ありがとう! – Dsjohn

関連する問題