• “创建窗口句柄时出错”的问题


    今天用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这个控件,就不会出现问题(虽然我在其他页面也用的这个控件,就没出现问题)。

  • 相关阅读:
    windows下python开发环境搭建
    看看两年前的我
    网络函数[00]函数总述
    网络函数[04]connect解析
    网络函数[08]网络读取函数解析
    网络函数[01]套接口地址图解
    网络函数[13]
    网络函数[07]accept解析
    网络函数[10]shutdown解析
    网络函数[14]
  • 原文地址:https://www.cnblogs.com/jiutianxingchen/p/3340887.html
Copyright © 2020-2023  润新知