我正在显示的ListViewItems,在ListView中的ListView组中进行分类,只显示它们的Text属性,并在此处被截断(即使它们是特定组中的唯一项目,并且有一英亩和公顷的屏幕真实可用的房地产)。
我希望他们确实显示他们的Text属性,但完整地,不会被截断。
我以这种方式分配ListViewItem文本属性:
public LegacyApplication(String AAppName, String ATitle, String ADesc, String AIconFileName, String APathOfExe) {
. . .
base.Text = ATitle;
. . .
}
我做错了什么或做错了什么?是否有一些我不知道的属性会控制ListViewItem上文本的外观?
答案 0 :(得分:2)
不确定这是否适用于您的情况,但也许您可以尝试使用the AutoResizeColumn method;设为ColumnContent
。
答案 1 :(得分: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
}
}
答案 2 :(得分:2)
我知道这是一个古老的问题,但我确信Dr.Wilys对AutoResizeColumn的回答应该是在正确的道路上,所以稍微探讨一下......
将输出写入listview后(我的是批量sql server操作的输出)我更新了listview(这里,lstResults),因此:
.ui-datepicker {
z-index: 10!important;
}
这对我有用... NB我的观点类型是详细信息,我没有尝试过其他人。
答案 3 :(得分: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
答案 4 :(得分:1)
我发现最好的解决方案是使用View = View.Tile。
这显示了大部分文字;我的解决方法是将文本分配给每个项目的工具提示,这样在完整文本仍未显示的情况下,用户可以将鼠标悬停在视线中。
答案 5 :(得分: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;
}
};
}