列表视图中的多行文本

use*_*286 4 c# listview winforms

我尝试使winform包含ListView作为详细信息(ListView1.View ="Details")此ListView有2个SubItems,我需要Wrap String并将其放到SubItem.

我不能使用由其他Like TableXP创建的任何组件或用户控件或...

我使用此代码:

lstShares.Columns.Add("Share Name",100);
lstShares.Columns.Add("Path",300);
lstShares.View = View.Details;
ManagementObjectSearcher shares = new ManagementObjectSearcher("Select * from Win32_Share");
foreach (ManagementObject share in shares.Get())
{
    lstShares.Items.Add(new ListViewItem(new String[] { share["Name"].ToString(), share["Path"].ToString() + "\n" + "AAAA" }));
}
Run Code Online (Sandbox Code Playgroud)

如果我使用"\n"或Environment.NewLine,则不会像下面的图片那样改变 在此输入图像描述

有人有想法吗?TNX.

Lar*_*ech 7

请考虑使用DataGridView控件.它支持包装:

dgv.AutoGenerateColumns = false;
dgv.RowHeadersVisible = false;
dgv.MultiSelect = false;
dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dgv.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells;
dgv.DefaultCellStyle.WrapMode = DataGridViewTriState.True;
dgv.Columns.Add(new DataGridViewTextBoxColumn() {
  HeaderText = "Share Name",
  ReadOnly = true,
  AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill,
  FillWeight = 25
});
dgv.Columns.Add(new DataGridViewTextBoxColumn() {
  HeaderText = "Path",
  ReadOnly = true,
  AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill,
  FillWeight = 75
});
var shares = new ManagementObjectSearcher("Select * from Win32_Share");
foreach (ManagementObject share in shares.Get()) {
  dgv.Rows.Add(new String[] { share["Name"].ToString(),
                              share["Path"].ToString() + "\n" + "AAAA" });
}
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述


Jim*_*ble -4

您可以使用“\n”字符换行到列表项文本中的下一行,例如:

listView1.Items.Add("apples\noranges\nbananas");

listView1.Items.Add("kiwis\ngrapefruits\nwatermelons");
Run Code Online (Sandbox Code Playgroud)