【问题标题】:Set Listviewitem's width设置 Listviewitem 的宽度
【发布时间】:2013-01-20 18:46:45
【问题描述】:

我有一个 Listview,它有一列。视图设置为 List,我可以看到每个 Listviewitem,但我无法选择项目的行,我必须选择项目的文本。是否可以使 Listviewitem 的宽度与 Listview 本身的大小相同,以便用户可以单击 Listviewitem 上的任意位置来选择项目?

我尝试搜索,但只能找到如何更改列宽以及如何在 XAML 中修复它,但这是针对 WinForm 的。

编辑 - 根据要求,这是由 Visual Studio 设计器生成的代码。它是与 ListviewItem 相关的唯一代码。

System.Windows.Forms.ListViewItem listViewItem1 = new System.Windows.Forms.ListViewItem("1");
System.Windows.Forms.ListViewItem listViewItem2 = new System.Windows.Forms.ListViewItem("2");
System.Windows.Forms.ListViewItem listViewItem3 = new System.Windows.Forms.ListViewItem("3");
System.Windows.Forms.ListViewItem listViewItem4 = new System.Windows.Forms.ListViewItem("4");
System.Windows.Forms.ListViewItem listViewItem5 = new System.Windows.Forms.ListViewItem("5");
System.Windows.Forms.ListViewItem listViewItem6 = new System.Windows.Forms.ListViewItem("6");
System.Windows.Forms.ListViewItem listViewItem7 = new System.Windows.Forms.ListViewItem("7");
this.listView1 = new System.Windows.Forms.ListView();

this.listView1.Activation = System.Windows.Forms.ItemActivation.OneClick;
            this.listView1.AllowDrop = true;
            this.listView1.AutoArrange = false;          
            this.listView1.BorderStyle = System.Windows.Forms.BorderStyle.None;
            this.listView1.Font = new System.Drawing.Font("Microsoft Sans Serif", 15.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            this.listView1.ForeColor = System.Drawing.SystemColors.MenuHighlight;
            this.listView1.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
            listViewItem1.StateImageIndex = 0;
            this.listView1.Items.AddRange(new System.Windows.Forms.ListViewItem[] {
            listViewItem1,
            listViewItem2,
            listViewItem3,
            listViewItem4,
            listViewItem5,
            listViewItem6,
            listViewItem7});
            this.listView1.Location = new System.Drawing.Point(105, 129);
            this.listView1.Name = "listView1";
            this.listView1.Size = new System.Drawing.Size(157, 475);
            this.listView1.TabIndex = 4;
            this.listView1.UseCompatibleStateImageBehavior = false;
            this.listView1.View = System.Windows.Forms.View.List;

【问题讨论】:

  • 为什么这被否决了?没有要显示的代码,它是一个标准的 Listview 控件。有人可以解释一下我在问题中做错了什么,以便我可以解决它吗?
  • WPF 还是 WinForms?在 XAML 或代码中?
  • dans3itz,它是 WinForms 和代码。有要设置的属性吗?
  • 我没有你的代码..我不确定你在说什么..你的代码在哪里..?
  • DJ Kraze,正如我在您删除的答案的 cmets 中提到的,您正在调整 Listview 控件本身,而不是 ListviewItem。更改 Listview 的列宽不会更改您可以在 ListviewItem 中选择的区域。这些不是一回事。我添加了与 Listview 相关的唯一代码,它是由设计器自动生成的。不涉及其他代码。

标签: c# winforms listview listviewitem


【解决方案1】:

一个简单的解决方案是使用 ListBox 而不是 List View

如果是简单的文本,最好使用ListBox。

更新:

在 ListView 中获得此功能的最简单方法是在要填充的每个项目字符串的末尾添加虚拟空格。

【讨论】:

  • 不幸的是,列表框在拖动多个项目时出现问题(用于拖放功能)。 ListView 不会取消选择最后一项。我可以扩展一个 ListBox,但由于 ListView 可以满足我的所有需求,我希望我可以轻松设置宽度。
  • 最简单的 hack 将在每个字符串的末尾添加虚拟空格来填充。实际上,您可以为此使用自定义绘图或其他东西。
  • 我添加了一个关于他如何进行自定义绘图的示例,但我什至不确定 OP 是否知道他想要什么,或者他很难解释它
  • 狼,加空格肯定能解决问题。感觉很hacky,但如果没有更好的解决方案,我将不得不使用它。谢谢你的主意。 (抱歉,我不能对我目前的代表进行投票)。
  • @DJKRAZE :他想自定义绘制 ListView 中的项目。不是列。
【解决方案2】:

Better ListViewBetter ListView Express(免费)支持这一点。默认情况下,它的行为类似于 ListBox(详细信息视图,无列):

可以通过将 AutoSizeItemsInDetailsView 属性设置为 true 来触发项目自动调整大小:

betterListView.AutoSizeItemsInDetailsView = true;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多