【问题标题】:How to add a button to a column or subitem in a ListView in WinForms? [duplicate]如何在 WinForms 的 ListView 中向列或子项添加按钮? [复制]
【发布时间】:2016-02-09 07:46:53
【问题描述】:

我很难弄清楚如何在列表视图上列出一个带有值的按钮以与每个值一起使用。

我需要用按钮替换所有添加/编辑字符串值。最初的任务是针对一个列表框,但我认为完成此任务的唯一方法是通过列表视图项中的子项。谢谢。

 public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        this.DefinedClassesLb.Columns.Add("Samples", 90);
        this.DefinedClassesLb.Columns.Add("AddEdit", 60);
        this.DefinedClassesLb.Columns.Add("Delete", 45);

        ListViewItem item = new ListViewItem("1");
        item.SubItems.Add("add/edit");
        item.SubItems.Add("x");
        this.DefinedClassesLb.Items.Add(item);

        ListViewItem item2 = new ListViewItem("2");
        item2.SubItems.Add("add/edit");
        item2.SubItems.Add("x");
        this.DefinedClassesLb.Items.Add(item2);

        ListViewItem item3 = new ListViewItem("3");
        item3.SubItems.Add("add/edit");
        item3.SubItems.Add("x");
        this.DefinedClassesLb.Items.Add(item3);

        ListViewItem item4 = new ListViewItem("4");
        item4.SubItems.Add("add/edit");
        item4.SubItems.Add("x");
        this.DefinedClassesLb.Items.Add(item4);

        ListViewItem item5 = new ListViewItem("5");
        item5.SubItems.Add("add/edit");
        item5.SubItems.Add("x");
        this.DefinedClassesLb.Items.Add(item5);

        ListViewItem item6 = new ListViewItem("6");
        item6.SubItems.Add("add/edit");
        item6.SubItems.Add("x");
        this.DefinedClassesLb.Items.Add(item6);

        ListViewItem item7 = new ListViewItem("7");
        item7.SubItems.Add("add/edit");
        item7.SubItems.Add("x");
        this.DefinedClassesLb.Items.Add(item7);

        this.DefinedClassesLb.View = View.Details;
        this.DefinedClassesLb.HeaderStyle = ColumnHeaderStyle.None;

    }
}

【问题讨论】:

  • 为什么不用datagridview?然后只需将所需列声明为按钮列
  • 不幸的是,您可能必须深入研究 OwnerDraw 才能完成此操作。请参阅 this answer 中的 ListViewExtender 类。
  • I am having a terrible time... - 我建议你看看 WPF 作为 winforms 的替代品,这样你就可以随心所欲地做任何你需要的事情,而不会浪费大量时间来对抗古老框架的无能。跨度>
  • 我同意 Nissim,您是否有可能切换到 DataGridView 而不是 ListView ? DataGridView 有很多 ListView 所没有的功能。

标签: c# winforms listview frontend


【解决方案1】:

ListView 控件对于其他控件来说是一个糟糕的宿主。它根本不适合他们。具体来说,它不能正确处理焦点,尤其是没有为子控件提供可滚动面板。最后一个问题才是真正的杀手。

您的选择是:

  1. 按照建议,使用DataGridView

  2. 使用ObjectListView。这是一个围绕标准 .NET ListView 的开源包装器,它赋予了它超能力!喜欢displaying buttons

即使在这里,按钮也不是托管的——控件本身做了很多工作来使某些东西看起来像一个按钮。

【讨论】:

    猜你喜欢
    • 2010-10-02
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    相关资源
    最近更新 更多