1

私が表示しているListViewItemsは、ListViewのListViewグループ内に分類されており、Textプロパティのみを表示しており、そこで切り捨てられています(特定のグループ内の唯一のアイテムであり、数エーカーと数ヘクタールの画面領域が利用可能である場合でも) 。

実際にTextプロパティを表示してもらいたいのですが、全体としては切り捨てられていません。

この方法でListViewItemテキストプロパティを割り当てています。

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

私は何を間違っているのですか、それとも正しく行っていないのですか?ListViewItemのテキストの外観を制御することに気付いていないプロパティはありますか?

4

6 に答える 6

2

これがあなたの状況でうまくいくかどうかはわかりませんが、おそらくAutoResizeColumnメソッドを使用してみることができます。に設定しColumnContentます。

于 2012-04-04T02:17:17.307 に答える
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
     }
  }
于 2015-03-05T09:01:55.817 に答える
2

これは古い質問であることは承知していますが、AutoResizeColumnを使用するDr.Wilysの回答は正しい道にあるはずだと確信していたので、少し調べてみました...

リストビューに出力を書き込んだ後(私のものはバルクSQLサーバー操作の出力でした)、リストビュー(ここではlstResults)を次のように更新しました。

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

これは私のために働きました...NB私のビュータイプは詳細でした、私は他のものを試していません。

于 2016-02-04T10:04:01.267 に答える
1

ListViewに複数行のテキストが必要な場合は、ObjectListView(.NET WinForms ListViewのオープンソースラッパー)を参照してください。これにより、所有者の描画(およびその他のListViewの煩わしさ)に関連する問題の多くが処理されます。

私はこれをコメントとして入れますが、それは答えであり、素敵なスクリーンショットがあります:WinForms ListViewコントロールの複数行のリストアイテム?

次に、懸念がある場合は、フォローアップを参照してください 。ObjectListViewを使用して列のテキストをワードラップする方法

于 2012-04-04T02:04:46.767 に答える
1

これに対する最善の解決策は、View=View.Tileを使用することであることがわかりました。

これにより、テキストのほとんどが表示されます。私の回避策は、各アイテムのツールチップにテキストを割り当てて、フルテキストがまだ表示されていない場合に、ユーザーがホバーして視界に入ることができるようにすることです。

于 2012-04-07T15:58:12.743 に答える
1

@Ahmadの回答の具体化されたバージョン(適合しないアイテムのツールチップを使用):

    void SetTooltipForNonFittingItems(ListView listView)
    {
        var tooltip = new ToolTip();
        listView.MouseMove += (_1, e) =>
        {
            ListViewItem item = listView.GetItemAt(e.X, e.Y);
            if (item != null)
            {
                using (Graphics graphics = listView.CreateGraphics())
                {
                    var itemTextWidth = graphics.MeasureString(item.Text, item.Font).Width;
                    if (itemTextWidth > listView.Width)
                    {
                        if (!item.Equals(tooltip.Tag))
                        {
                            tooltip.Active = true;
                            tooltip.Tag = item;
                            // as written, the tooltip covers the item
                            // if you prefer to show it at the location of the cursor,
                            // use listView.PointToClient(Cursor.Position)
                            tooltip.Show(item.Text, listView, item.Position);
                        }
                    }
                    else
                    {
                        tooltip.Tag = null;
                        tooltip.Active = false;
                    }
                }
            }
            else
            {
                tooltip.Tag = null;
                tooltip.Active = false;
            }
        };
    }
于 2018-06-25T10:26:04.990 に答える