none
请教达人,当我在VS设计器中拖放控件时,VS会进行哪些操作. RRS feed

  • 问题

  • 从来都只是以为,当我在设计器里拖放控件的时候,vs只会在我的*.Designer.cs文件中自动生成几行代码,但是这次我碰到了一个非常奇异的问题,让我对vs的设计器束手无策.

    话说我写了一个自定义控件(UserControl),在这个控件的uc_Load(...)控件中,我写了一些代码,可以通过编译,但是当我试图把这个控件拖到我的界面中的时候,vs会直接报错,提示一些莫名其妙的错误,当我将uc_Load里的函数做了一部分修改的时候,出错的信息也会产生变化,总之是尽一切可能让我把这个控件放到界面上。

    如果真是我的问题我也就认了,但是奇怪的是,如果我不把这个控件拖到界面上,而是通过代码

    uc c = new uc(); c.Location = ...;

    this.Controls.Add(c);

    这样手动将控件放到界面上的时候,程序可以照常运行,一切如我所愿。请问这到底是为什么??

    请问当我试图把一个控件拖放到界面上的时候,vs到底会执行怎样的操作?

    2010年7月25日 8:55

答案

  • 你拖拽的时候,设计器执行了Load,如果某些资源不到位,就会出错。

            private void UserControl1_Load(object sender, EventArgs e)
            {
                if (!DesignMode)
                {
                    // 你原来的代码。
                }
            }

    2010年7月25日 10:41

全部回复

  • 原先我以为它最多只是暗中执行一遍这个控件的构造函数里的initialcomponent(),结果不料...
    2010年7月25日 8:57
  • 你拖拽的时候,设计器执行了Load,如果某些资源不到位,就会出错。

            private void UserControl1_Load(object sender, EventArgs e)
            {
                if (!DesignMode)
                {
                    // 你原来的代码。
                }
            }

    2010年7月25日 10:41
  • 果然好使啊这招,十分感谢。

     

    虽然我目前还没有找到拖拽出错的具体原因,但是您提供的方法确实能够解决我目前的问题,十分感谢。

    2010年7月26日 2:57