当ListView Windows窗体中没有项目时显示空文本

时间:2016-12-10 13:45:29

标签: c# winforms listview empty-list

我正在尝试在列表视图中显示一条空文本消息,当我内部没有项目时(就在表单初始化时)。

我尝试过使用`OnPaint()事件搜索不同的方法,但是效果不好......

有人可以帮帮我吗? ` 编辑:这是我尝试过的方法之一:

  protected override void WndProc(ref Message m)
        {
            base.WndProc(ref m);
            if (m.Msg == 20)
            {
                if (this.Items.Count == 0)
                {
                    _b = true;
                    Graphics g = this.CreateGraphics();
                    int w = (this.Width - g.MeasureString(_msg,
                      this.Font).ToSize().Width) / 2;
                    g.DrawString(_msg, this.Font,
                      SystemBrushes.ControlText, w, 30);
                }
                else
                {
                    if (_b)
                    {
                        this.Invalidate();
                        _b = false;
                    }
                }
            }

            if (m.Msg == 4127) this.Invalidate();
        }

1 个答案:

答案 0 :(得分:1)

您可以处理WM_PAINT(0xF)消息并检查Items集合中是否没有项目,在ListView的中心绘制一个字符串。例如:

using System.Windows.Forms;
using System.ComponentModel;
using System.Drawing;

public class MyListView : ListView
{
    public MyListView()
    {
        EmptyText = "No data available.";
    }
    [DefaultValue("No data available.")]
    public string EmptyText { get; set; }
    protected override void WndProc(ref Message m)
    {
        base.WndProc(ref m);
        if (m.Msg == 0xF)
        {
            if (this.Items.Count == 0)
                using (var g = Graphics.FromHwnd(this.Handle))
                    TextRenderer.DrawText(g, EmptyText, Font, ClientRectangle, ForeColor);
        }
    }
}