2012-04-03 25 views
0

ListViewのListView内で分類されているListViewItemは、Textプロパティのみを表示しています。特定のグループでは、利用可能なスクリーンの不動産のエーカーとヘクタールがあります)。ListViewItemsのテキスト全体を表示する必要があります(切り捨てられません)

実際にTextプロパティを表示したいが、その全体が切り捨てられないようにしたいと思います。

私はのListViewItemのテキストプロパティをこのように割り当てています:

public LegacyApplication(String AAppName, String ATitle, String ADesc, String AIconFileName, String APathOfExe) { 
    . . . 
    base.Text = ATitle; 
    . . . 
} 

私は何を間違っているのか、右にやって失敗していますか? ListViewItemのTextの外観を制御することを知らないプロパティがありますか?

答えて

2

Windowsエクスプローラでも、トリミングされたテキストのツールチップが設定され、ListViewコントロールも使用されます。 MouseMoveイベントを処理し、ListView.GetItemAt(...)を使用してマウスが移動している項目を調べることで、その動作を模倣できます。代わりに、ItemMouseHoverイベントを使用することもできますが、ユーザーが実際にマウスを動かさなくてもポップアップを表示するのを待つ必要がなくなり、MouseMoveをより使いやすくすることができます。

Windowsエクスプローラを模倣するために、行動(このサンプルは唯一のドラフトで、エラーが含まれている場合があります):

 //get the item at the current mouse location. 
    ListViewItem item = myListView.GetItemAt(e.X, e.Y); 
    if (item != null) 
    { 
     using (Graphics graphics = this.myListView.CreateGraphics()) 
     { 
      var itemTextWidth = graphics.MeasureString(item.Text, item.Font).Width; 
      if (itemTextWidth > myListView.Width) 
      { 
       if (!item.Equals(itemsToolTip.Tag) && !itemsToolTip.Active) 
       { 
       //Set the tooltip , tag it with the item and set it as active ... 
       } 
       // Adjacent ' text trimmed' list view items. 
       else if (!item.Equals(itemsToolTip.Tag)) 
       { 
       //set the tooltip as none active. 
       } 
      } 
      else//None trimmed list view items. 
      { 
       //clear the tooltip and set it as none active 
      } 
     } 
    } 
    else 
    { 
     //clear the tooltip and set it as none active 
    } 
    } 
1

ListViewに複数行のテキストが必要な場合は、ObjectListView(.NET WinForms ListViewのオープンソースラッパー)をご覧ください。これは、オーナー描画(および他のListView迷惑)に関する多くの問題を処理します。

私はコメントとしてこれを置くだろうが、それは答えである、素敵なスクリーンショットがあります。そして、あなたが任意の懸念を持っている場合は、フォローアップを参照してくださいMulti-line list items on WinForms ListView control?

を:この場合 How to wordWrap the text in a column using ObjectListView

+0

ありがとうございます。サードパーティ製のコントロールを避けようとしています –

+0

@ClayShannonサードパーティのコンポーネントでバグがあり、ソースがない、または外に出てしまった場合、私は通常100%に同意しますビジネスのしかし、このObjectListViewと関連するソースコードはGNU General Public Licenseのライセンスを受けているため、よりオープンなソースです。 –

+1

OK、私はそれをチェコにして、 "それである力"がそれのために行くかもしれないかどうかを見ます。実は、私のListViewItemsのような複数行のテキスト、表示_are_標準のListViewコントロールでホストされている –

2

わかりませんあなたの状況にはうまくいくでしょうが、おそらくthe AutoResizeColumn methodを試してみてください。 ColumnContentに設定します。

+0

私はそれを試みましたが、正しい構文を得ることはできません。私は試みました:if(listApplications.Groups.Count> 0){ listApplications.Groups [0] .Items [0] .AutoResizeColumn(0、 ColumnHeaderAutoResizeStyle.HeaderSize); } - それはコンパイルされません... –

1

私は、これに対する最良の解決策は、View = View.Tileを使用することでした。

これはテキストの大部分を表示します。私の回避策は、フルテキストがまだ表示されていない場合に、ユーザーがカーソルを移動して視界に入るように、各項目のツールチップにテキストを割り当てることです。

2

私はこれが古い質問ですが、私は確信しDr.WilysがAutoResizeColumnをどうする答えた正しい道の上にする必要があります知っていますそれで少し探検しました...

出力をリストビューに書き込んだ後(私はバルクSQLサーバーの操作が)私は、このようにリストビュー(ここでは、lstResults)更新:私のビュータイプは詳細たNB ...

lstResults.AutoResizeColumn(0, ColumnHeaderAutoResizeStyle.HeaderSize); 
lstResults.AutoResizeColumn(1, ColumnHeaderAutoResizeStyle.ColumnContent); 

これは私のために働いたが、私は他の人が試していません。

関連する問題