添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
博主分享了在程序中遇到的ComboBox控件滚动事件禁用问题,通过自定义WndProc方法排查并解决,同时强调了检查控件释放的重要性,尤其是在用户对象数量庞大时。文章还提供了修复代码示例和内存管理技巧。 摘要由CSDN通过智能技术生成

格式太忙先不整理

程序报错日志:

因为是程序进行一定的操作才出现,一直找不到问题,最后才发现是Combobox 自定义控件的问题:控件未获得焦点时禁用鼠标滚轮事件是用的PreFilterMessage方法,
最后换了种实现方式:

protected override void WndProc(ref Message m)
{
if (m.Msg == 522)
{
Control currentontrol = null;
currentontrol = Control.FromChildHandle(m.HWnd);
bool findControlAndNotFocused = false;
if (currentontrol != null)
{
while (currentontrol.Parent != null || currentontrol == this)
{
if (currentontrol == this)
{
if (!currentontrol.Focused)
{
findControlAndNotFocused = true;
}
break;
}
currentontrol = currentontrol.Parent;
}
}
if (findControlAndNotFocused)
{
return;
}
else
{
base.WndProc(ref m);
}
}
else
{
base.WndProc(ref m);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
总结:
如若出现同样的问题,可以考虑看下自己程序的自定义控件。

补充:
后来又发现只有本机电脑解决了,现场电脑还是有问题,发现任务管理器-用户对象接近1W 现场会出现问题。如下图

解决方法
最终原因还是程序控件没有释放:遇到此问题,着重检查这种代码
//ctrl.Controls.Clear();
应改为

while (ctrl.Controls.Count > 0)
{
Control ct = ctrl.Controls[0];
ctrl.Controls.Remove(ct);
ct.Dispose();
ct = null;
}
————————————————
版权声明:本文为CSDN博主「小仙女&&」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Jessyzhao_0/article/details/122878705

最近在做一个winform 的项目,由于是需要多页面切换跳转的,所以用了MDI窗体,经常需要子窗体之间跳转,窗体的跳转的代码如下: FormFaceLogin frm = new FormFaceLogin(); frm.TopLevel = false; frm.Dock = DockStyle.Fill; frm.FormBorderStyle = FormBorder...
目录一、用 C# 编写基于UDP向别人发送消息的控制台 程序 1.1用 C# 做一个控制台输出字符的试验 程序 来熟悉 C# 1.2 正式开始编写基于UDP向别人发送消息的控制台 程序 二、用 C# 编写基于UDP向别人发送消息的 窗口 程序 三、用wireshark抓取上述 程序 发送的网络包并分析数据帧 博主决定改变博文风格,虽然这些学习笔记是课程的作业,但是本着寓教于乐的思想,从本博文开始放弃一本正经的博文写法,在完全分享干货的同 自己来随性的写。也希望大家不要把这些博文当做“实验报告”或“什么什么的报告”来看,既然是发表到网络上
今天遇到一个问题,见上图,控件是自己写的,不是标准的控件 在执行Controls.Add(control),出现上述问题。 问题的具体描述:根据条件设置移除和加入不同的控件,当前控件不满足条件 ,将控件移除,然后加入新的控件。 代码如下: if (this.Panel.Controls.Contains(this.R_Parameter)) this.Panel.Controls.Remove(this.R_Para...
这个问题的出现是因为内存溢出产生的,由于一直在 创建 控件却得不到释放出现内存溢出。那我们就找方法释放控件。正确的释放控件的方法是 while (tabControl.Controls.Count > 0) if (tabControl.Controls[0] != null) tabControl.Controls[0].Dispose(); 其他控件...
今天用MDI窗体,在一个子窗体A中,通过主窗体的下拉菜单调用另外一个子窗体B,出现错误“ 创建 窗口 句柄 出错 ”,原因不清楚;似乎与该子窗体A用了DotNetBar控件的DataGridViewX控件有关,我换成 C# 自带的DataGridView控件,就没在出现该问题。 有意思的地方在于:如果DataGridViewX控件里边没有数据,则不会出现问题;如果有数据,则出现。而且如果是进入窗体即查询出来...
场景:在 窗口 中有个TabControl,左侧有TreeView 选择TreeView中结点,Tabcontrol.Tabpages.Clear(); 然后新增tabpages 问题:每次新增tabpages,会增加300~400个user objects(windows任务管理器中可以查看)。直到windows上限10000个。会弹出如题所示错误: Win32Exception 创建 窗口 句柄
C# 创建 窗口 句柄 出错 可能有多种原因。以下是一些常见的问题及其解决方法: 1. 窗口 类未注册:在调用 CreateWindowEx 函数之前,必须先注册 窗口 类。可以使用 RegisterClassEx 函数来注册 窗口 类。 2. 无效的 窗口 句柄 :如果使用一个已经释放的 窗口 句柄 ,或者传递了一个无效的 窗口 句柄 ,就会出现该错误。请确保在使用 窗口 句柄 之前检查它是否有效。 3. 窗口 样式错误:在 创建 窗口 ,必须指定正确的 窗口 样式。例如,如果 创建 一个子 窗口 ,必须指定 WS_CHILD 样式。 4. 窗口 过程错误: 窗口 过程是处理 窗口 消息的函数。如果 窗口 过程中有错误,就会导致 创建 窗口 句柄 失败 。请确保 窗口 过程正确地处理了所有消息。 5. 线程不正确:如果在不正确的线程上 创建 窗口 句柄 ,就会出现该错误。请确保在正确的线程上 创建 窗口 句柄 。 以上是一些可能导致 创建 窗口 句柄 失败 的常见问题及其解决方法。如果仍然无法解决问题,建议先尝试查看相关的错误信息和日志,以便更好地定位问题。