调整 ListView 列以适应 WinForms

2024-01-15

我面临列表视图列的调整大小问题。如果你锚/对接listview转普通winform比listview锚点或对接效果好。我的意思是,当 winform 最大化时,listview 将调整大小并适合 winform,但您在其上设计的列不会随 listview 调整大小。

我的问题是:有没有办法用listview调整listview的列大小以适应winform大小?

列表视图设计代码:

 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 控件中,使用 View 属性设置为详细信息,您可以 创建多列输出。 有时你会想要最后一个 ListView 的列自行调整大小 占用所有剩余空间。你 可以通过设置列来做到这一点 宽度为魔法值-2。

在下面的示例中,名称为 ListView控件是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;
}

EDIT:

您可以通过编程方式使用自己实现的算法来做到这一点。问题在于列表视图不知道您想要调整哪些列的大小以及不调整哪些列的大小。因此,您将在 resize 方法(或 resizeEmd 方法)中指定所有列大小的更改。因此,您计算列表视图的所有宽度,然后按比例划分所有列之间的值。 您的列宽度是 50 的倍数。因此,您的整个列表视图宽度为 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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

调整 ListView 列以适应 WinForms 的相关文章

随机推荐