c# - 调整 ListView 列以适应 WinForms

标签 c# winforms listview

我遇到了 ListView 列的调整大小问题。如果您将 ListView 锚定/停靠 到正常的 winform,那么 ListView 锚定或停靠效果会很好。我的意思是 listview 会随着 winforms 的最大化而调整大小并适合 winforms,但是您在其上设计的列不会随 listview 调整大小。

我的问题是:是否有任何方法可以使用 listview 调整 listview 的列大小以适应 winform 大小?

ListView 设计代码:

 private void Form1_Load(object sender, EventArgs e)
    {

        listView1.View = View.Details;
        listView1.LabelEdit = true;
        listView1.BackColor = Color.GreenYellow;
        listView1.Columns.Add("Date", 100, HorizontalAlignment.Left);
        listView1.Columns.Add("TransID", 50, HorizontalAlignment.Left);
        listView1.Columns.Add("voucher", 100, HorizontalAlignment.Right);
        listView1.Columns.Add("particulars", 300, HorizontalAlignment.Left);
        listView1.Columns.Add("deposit", 100, HorizontalAlignment.Right);
        listView1.Columns.Add("withdrawal", 100, HorizontalAlignment.Right);

        string connstr = "server=.;initial catalog=DataBase;uid=UID;pwd=PWD";
        SqlConnection con = new SqlConnection(connstr);
        con.Open();
        listView1.Items.Clear();
        listView1.Refresh();
        string sql = "select date=convert(varchar,date,103),transID,max(particulars)as particulars,sum(deposit)as deposit,sum(withdrawal) as withdrawal,voucher from debank group by date,transID,voucher";
        SqlCommand cmd = new SqlCommand(sql, con);
        SqlDataAdapter dap = new SqlDataAdapter(cmd);
        DataSet ds = new DataSet();
        dap.Fill(ds);
        DataTable dt = ds.Tables[0];

        for (int i = 0; i < dt.Rows.Count; i++)
        {
            DataRow dr = dt.Rows[i];
            ListViewItem lvi = new ListViewItem(dr["date"].ToString());
            lvi.SubItems.Add(dr["transID"].ToString());
            lvi.SubItems.Add(dr["voucher"].ToString());
            lvi.SubItems.Add(dr["particulars"].ToString());
            lvi.SubItems.Add(dr["deposit"].ToString());
            lvi.SubItems.Add(dr["withdrawal"].ToString());
            listView1.Items.Add(lvi);
            listView1.FullRowSelect = true;

        }

        SizeLastColumn(listView1);


    }

最佳答案

  1. 程序化的。您必须在代码中维护它。
  2. 您可以调整 ListView 中最后一列的大小,使其自动调整大小。 净样本:

In a ListView control, with the View property set to Details, you can create a multi-column output. Sometimes you will want the last column of the ListView to size itself to take up all remaining space. You can do this by setting the column width to the magic value -2.

In the following example, the name of the ListView control is lvSample:

[c#]
private void Form1_Load(object sender, System.EventArgs e)
{
    SizeLastColumn(lvSample);
}

private void listView1_Resize(object sender, System.EventArgs e)
{
    SizeLastColumn((ListView) sender);
}

private void SizeLastColumn(ListView lv)
{
    lv.Columns[lv.Columns.Count - 1].Width = -2;
}

编辑:

您可以使用自己实现的算法以编程方式做到这一点。问题是 ListView 不知道您想要调整哪些列的大小,哪些不需要。因此,您将在 resize 方法(或 resizeEmd 方法)中指定所有列的大小更改。因此,您计算 ListView 的所有宽度,然后按比例划分所有列之间的值。 您的列宽是 50 的倍数。因此,您的整个 ListView 宽度为 15*х(默认状态下 x=50。我根据列数及其宽度计算出 15 个值)常规单位。调整表单大小时,您可以计算新的 x = ListView.Width/15 然后将每个列的宽度设置为所需的值,因此

private void SizeLastColumn(ListView lv)
{
 int x = lv.Width/15 == 0 ? 1 : lv.Width/15;
 lv.Columns[0].Width = x*2; 
 lv.Columns[1].Width = x;
 lv.Columns[2].Width = x*2;
 lv.Columns[3].Width = x*6;
 lv.Columns[4].Width = x*2;
 lv.Columns[5].Width = x*2;
}

关于c# - 调整 ListView 列以适应 WinForms,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4802744/

相关文章:

c# - 如何在 WPF DataGrid/ListView/ListBox 中添加计算的附加列

C# 使用正则表达式删除括号内的所有内容和括号本身

c# - 如何让 AutoMapper 处理自定义命名约定?

c# - 从 winform 使用 URI 启动应用程序

c# - 如何使用 WinForm 将图像正确添加到 TabControls 中的选项卡

c# - Windows 窗体启动画面 - 在加载主窗体时显示窗体

c# - 如何通过代码在 SSIS 中执行带有包密码的包?

java - findViewByID 找不到 ListView

android - ItemClickListener 不工作

java - Android ListView 中的阿拉伯文字