当 ListView Windows 表单中没有项目时显示空文本
Display empty text when there are no items in ListView Windows forms
当列表视图中没有项目时(即初始化表单时),我试图在列表视图中显示一条空文本消息。
我已经尝试搜索不同的方法,其中一个是使用 `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();
}
您可以处理 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);
}
}
}
当列表视图中没有项目时(即初始化表单时),我试图在列表视图中显示一条空文本消息。
我已经尝试搜索不同的方法,其中一个是使用 `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();
}
您可以处理 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);
}
}
}