zoukankan      html  css  js  c++  java
  • “创建窗口句柄时出错”的问题

    今天用MDI窗体,在一个子窗体A中,通过主窗体的下拉菜单调用另外一个子窗体B,出现错误“创建窗口句柄时出错”,原因不清楚;似乎与该子窗体A用了DotNetBar控件的DataGridViewX控件有关,我换成C#自带的DataGridView控件,就没在出现该问题。

    有意思的地方在于:如果DataGridViewX控件里边没有数据,则不会出现问题;如果有数据,则出现。而且如果是进入窗体即查询出来的数据,也不会出现问题,非要是进入窗体后,刷新过滤出来的数据,才会出现问题。

    目前发现的解决方案发现有三个:

    1.在第二个子窗体B里,后台代码添加下边方法,重绘创建句柄的方法。

    protected override void CreateHandle()
            {
                if (!IsHandleCreated)
                {
                    try
                    {
                        base.CreateHandle();
                    }
                    catch { }
                    finally
                    {
                        if (!IsHandleCreated)
                        {
                            base.RecreateHandle();
                        }
                    }
                }
            }

    不过该方法从表面看是解决了,但实际上并没有完全解决问题,当你关闭打开的子窗体B的时候,发现后台子窗体排列是有问题的。

    2.将主窗体的构造函数里的自定义方法都移开,即主窗体的方法只保留默认的 InitializeComponent()方法,其他函数方法都移开(可以移动到load事件里),问题完全解决。原理不清楚。

    使用该方法后,第一次不出现该问题,后来莫名其妙的又出现了,不过我同事和我用的一样的代码,他就没有再出现该问题。

    3.在代码里添加

    dataGridViewX1.SuspendLayout();//临时挂起控件的布局逻辑

    我是放在本子窗体A的所有样式都设置完成后,即作为Shown事件的最后一段代码。当然放在别的地方也可以,但是如果样式没有设置完成就执行该代码,会出现样式没有变化的情况。

    最好的办法就是不用DotNetBar的DataGridViewX这个控件,就不会出现问题(虽然我在其他页面也用的这个控件,就没出现问题)。

  • 相关阅读:
    初学JAVA随记——代码练习(输出半个菱形 for语句嵌套)
    初学JAVA随记——代码练习(体重问题,含switch、if else、三元条件运算符)
    初学JAVA随记——代码练习(二元一次方程)
    初学JAVA——语句的几个要点
    初学JAVA随记——运算符的几个要点2
    初学JAVA——试写if条件代码(自身体重为例)
    初学JAVA——运算符的几个要点
    初学JAVA——栈空间堆空间的理解
    自制刻度尺插件-前端简易实现"腾讯信用"界面
    JavaScript快速查找节点
  • 原文地址:https://www.cnblogs.com/jiutianxingchen/p/3340887.html
Copyright © 2011-2022 走看看