博主分享了在程序中遇到的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. 线程不正确:如果在不正确的线程上
创建
窗口
句柄
,就会出现该错误。请确保在正确的线程上
创建
窗口
句柄
。
以上是一些可能导致
创建
窗口
句柄
失败
的常见问题及其解决方法。如果仍然无法解决问题,建议先尝试查看相关的错误信息和日志,以便更好地定位问题。