c# - 如何添加到自定义列表视图用户控制编辑项目列组等任务?
问题描述
这个控件的原因是让列表视图在滚动时停止闪烁。闪烁已停止并且工作正常,但 listview 控件没有与常规 winforms listview 相同的属性。
在此屏幕截图中,带有 ListView 任务窗口的列表视图是常规的列表视图,而较小的矩形是自定义控件。
这是自定义控件列表视图代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
namespace FileSearcher
{
public partial class ListViewCostumControl : UserControl
{
public static ListViewControl lvnf;
public ListViewCostumControl()
{
InitializeComponent();
lvnf = new ListViewControl();
lvnf.Location = new Point(50, 50);
lvnf.Size = new Size(50, 50);
lvnf.View = View.Details;
lvnf.Dock = DockStyle.Fill;
lvnf.SuspendLayout();
lvnf.LabelEdit = true;
lvnf.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
lvnf.Columns.Add("", 984, HorizontalAlignment.Left);
lvnf.Sorting = SortOrder.None;
this.Controls.Add(lvnf);
lvnf.ResumeLayout(false);
}
public class ListViewControl : System.Windows.Forms.ListView
{
public ListViewControl()
{
//Activate double buffering
this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
//Enable the OnNotifyMessage event so we get a chance to filter out
// Windows messages before they get to the form's WndProc
this.SetStyle(ControlStyles.EnableNotifyMessage, true);
}
protected override void OnNotifyMessage(System.Windows.Forms.Message m)
{
//Filter out the WM_ERASEBKGND message
if (m.Msg != 0x14)
{
base.OnNotifyMessage(m);
}
}
}
private void ListViewNFTest_Load(object sender, EventArgs e)
{
}
}
}
解决方案
我自己添加了列,并获得了与原始列表视图控件相同的视图。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
namespace FileSearcher
{
public partial class ListViewCostumControl : UserControl
{
public static ListView lvnf;
public ListViewCostumControl()
{
InitializeComponent();
lvnf = new ListView();
lvnf.Location = new Point(50, 50);
lvnf.Size = new Size(50, 50);
lvnf.View = View.Details;
lvnf.Dock = DockStyle.Fill;
lvnf.HideSelection = false;
lvnf.MultiSelect = false;
//lvnf.SuspendLayout();
//lvnf.LabelEdit = true;
//lvnf.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.None;
lvnf.Columns.Add("Path", 212, HorizontalAlignment.Left);
lvnf.Columns.Add("Path", 90, HorizontalAlignment.Right);
lvnf.Columns.Add("Last modified", 120, HorizontalAlignment.Left);
lvnf.Columns.Add("", 984, HorizontalAlignment.Left);
lvnf.Sorting = SortOrder.None;
this.Controls.Add(lvnf);
lvnf.ResumeLayout(false);
}
public class ListView : System.Windows.Forms.ListView
{
public ListView()
{
//Activate double buffering
this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
//Enable the OnNotifyMessage event so we get a chance to filter out
// Windows messages before they get to the form's WndProc
this.SetStyle(ControlStyles.EnableNotifyMessage, true);
}
protected override void OnNotifyMessage(System.Windows.Forms.Message m)
{
//Filter out the WM_ERASEBKGND message
if (m.Msg != 0x14)
{
base.OnNotifyMessage(m);
}
}
}
private void ListViewNFTest_Load(object sender, EventArgs e)
{
}
}
}
工作良好,没有任何闪烁。
推荐阅读
- xamarin.forms - The underline of entry cannot removed
- python - Airflow DAG 正在运行,但未执行任务
- swift - I want to move selected tabelview cell on top
- python - 最后导入的文件会覆盖以前文件中的语句。指定导入变量的更好方法?
- python - 从数据框中获取数据并传递给其函数的方法并返回另一个带有新列的数据框
- android - 检查应用程序启动器是否有菜单键/默认情况下向上滑动应用程序抽屉或应用程序
- nginx - NLB 连接到 Nginx 入口的 EKS 上的 Nginx 入口 504 网关超时
- django - 如何从一个端点创建或更新多个不同模型的对象
- python - How to insert data into a relational one to one table in django?
- javascript - 如何在 React with Redux 项目中将我的 props 数据转换为数组?