增加ListView标题行的高度或填充

问题描述 投票:0回答:1

我正在尝试增加 ListView 的标题行列的填充或高度。我已经设法使用此代码更改背景颜色和文本颜色。

SelsList.DrawColumnHeader += (sender, e) =>
{
    using (SolidBrush brush = new SolidBrush(Color.FromArgb(64, 64, 122)))
    {
        e.Graphics.FillRectangle(brush, e.Bounds);
    }
    e.Graphics.DrawString(e.Header.Text, e.Font, Brushes.White, e.Bounds);
    e.DrawDefault = false;
};

*SelsList 是我的 ListView

enter image description here

我使用此代码来增加标题行列的填充和高度。但没有成功。 还有其他方法可以实现吗?

SelsList.DrawColumnHeader += (sender, e) =>
{
    using (SolidBrush brush = new SolidBrush(Color.FromArgb(64, 64, 122)))
    {
        e.Graphics.FillRectangle(brush, e.Bounds.Left, e.Bounds.Top, e.Bounds.Width, 50);
    }

    using (StringFormat format = new StringFormat())
    {
        format.Alignment = StringAlignment.Center;
        format.LineAlignment = StringAlignment.Center;
        e.Graphics.DrawString(e.Header.Text, e.Font, Brushes.White, e.Bounds, format);
    }

    e.DrawDefault = false;
};
c# .net winforms listview desktop-application
1个回答
0
投票

为了让 SelsList.DrawColumnHeader 运行,您必须事先进行以下两项设置:

SalesList.OwnerDraw = true;

SalesList.View = View.Details;

以下链接解释更多:

https://learn.microsoft.com/en-us/dotnet/api/system.windows.forms.drawlistviewcolumnheadereventargs?view=windowsdesktop-8.0

如果您想通过创建一个继承自 ListView 的类来实现此目的(我不推荐这样做),请查看下面的链接:

更改 ListView 标题和网格线颜色

还可以通过设置图像列表来更改数据行的高度而不是标题的高度,这在以下链接中进行了解释:

C# 更改 ListView 项目/行的高度


但我用更简单的方法做到了。

将 SelsList 放置在表单上上方有足够空间以增加标题高度的位置。

当然,在这个方法中,绘制列表的标题会很简单。 我们隐藏 SelsList 标头并通过在其上方创建一个新的视图列表来模拟该标头。如下:

public partial class Form1 : Form
{
    static readonly Color HEADER_FORECOLOR = Color.Yellow;
    static readonly Color HEADER_BACKCOLOR = Color.FromArgb(64, 64, 122);
    const int HEADER_HEIGHT = 70;               
    public Form1()
    {
        InitializeComponent();
    }
    private void Form1_Load(object sender, EventArgs e)
    {
        SetListView(HEADER_FORECOLOR, HEADER_BACKCOLOR, HEADER_HEIGHT, SelsList, this);
    }
    public static void SetListView(Color HeaderForeColor, Color HeaderBackColor, int HeaderHeight, ListView MainListView, Form MainForm)
    {
        // Create listViewHeader:

        var listViewHeader = new ListView
        {
            Name = "listViewHeader",
            Width = MainListView.Width,
            Height = HeaderHeight,
            GridLines = true,
            OwnerDraw = false,
            View = View.Details,
            HeaderStyle = ColumnHeaderStyle.None,
            BackColor = HeaderBackColor,
            ForeColor = HeaderForeColor,
            Location = new Point(MainListView.Location.X, MainListView.Location.Y - HeaderHeight)
        };

        // Set columns height in listViewHeader:

        var imgList = new ImageList
        {
            ImageSize = new Size(1, HeaderHeight)
        };
        listViewHeader.SmallImageList = imgList;

        MainForm.Controls.Add(listViewHeader);

        // Show grid lines and hide header row in the main list view (MainListView):

        MainListView.GridLines = true;
        MainListView.HeaderStyle = ColumnHeaderStyle.None;

        // Copy header columns as the first row to the listViewHeader:

        var IsFirstRow = true;
        foreach (ColumnHeader Header in MainListView.Columns)
        {
            listViewHeader.Columns.Add("", Header.Width, Header.TextAlign);
            if (IsFirstRow)
            {
                IsFirstRow = false;
                listViewHeader.Items.Add(Header.Text);
            }
            else
                listViewHeader.Items[0].SubItems.Add(Header.Text);
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.