gpt4 book ai didi

c# - 如何修复 ListView 中的控件重影问题?

转载 作者:行者123 更新时间:2023-12-03 18:56:38 25 4
gpt4 key购买 nike

我有一个 ListView 控件,我想在 ListView 的左上角添加一个复选框。
添加我正在使用的 CheckBox 控件的解决方案是:

Me.ListViewCustom1.Controls.Add(CheckBoxControl);
Me.CheckBoxControl.Location = new Point(3, 5);
我遇到的问题是在 ListView 滚动上。复选框出现全部涂抹。我一直在网上寻找解决方案,但我真的找不到可以解决这个问题的东西。
这是控件的显示方式:
Image(Sorry for random data)
在这种复杂的情况下,我在此寻求帮助。

最佳答案

假设您不想要我在 linked post 中使用的选项,您可以解决此问题的另一种方法是添加 CheckBoxListView 的标题.
使用 SendMessage您可以发送 LVM_GETHEADER消息到 ListView 控件并获取标题的句柄,然后 SetParent将帮助您将标题设置为复选框的父级:

const int LVM_GETHEADER = 0x1000 + 31;
[DllImport("user32.dll")]
static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
[DllImport("user32.dll")]
static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
private void Form1_Load(object sender, EventArgs e)
{
var header = SendMessage(listView1.Handle, LVM_GETHEADER, IntPtr.Zero, IntPtr.Zero);
var checkBox = new CheckBox()
{
AutoSize = true,
Text = "",
Location = new Point(3, 5)
};
this.listView1.Controls.Add(checkBox);
SetParent(checkBox.Handle, header);
}
这就是你得到的:
enter image description here
显然,我在列标题的文本之前添加了一些额外的空格,以便为复选框腾出空间。

关于c# - 如何修复 ListView 中的控件重影问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65853675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com