我自定义了一个用户控件 UserControl1 ,继承自 System.Windows.Forms.UserControl,我的本意是在该控件生成后,让用户在同一窗体上只允许存在一个该控件,如果用户再次创建的时候,该控件会检测父窗体是否已存在该控件,若已存在则消毁自己。现在我的问题是如何正确的消毁自己,我在 UserControl1 的构造函数或 Load 事件中的检测代码完成之后写 this.Dispose(); ,但在执行时会报““child”不是此父级的子控件。”的提示,虽然最后也是完成了消毁,但这行提示感觉很不爽,该怎么做才正确呢?

解决方案 »

  1.   

    >>>只允许存在一个该控件use singleton pattern instead
      

  2.   

    singleton pattern 怎么用啊?
      

  3.   

    思归说要用单件模式显示用户控件
    参照C#设计模式,
    Dispose()全部销毁
      

  4.   

    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpatterns/html/ImpSingletonInCsharp.asp>>>>如何在自定义用户控件中消毁控件自身?it is meaningless to 消毁控件自身, as long as you don't add the 控件 to the form's Controls collection, it will not be visibleif you insist, consider to throw an exception in the constructor and document it
      

  5.   

    感谢思归,关于“如何在自定义用户控件中消毁控件自身?”问题,您似乎不赞同这种做法,但我的确在另一个项目中有这个要求,就是在设计模式下,将此用户控件拖动到目标窗体上时它会完成一些对目标窗体类及内容的设置工作,在设置结束后,这个用户控件已经没有必要仍然存在在目标窗体类中,这时我需要将其彻底删除而不只是从父窗体的 Controls 中 Remove 掉,还要删除设计器为它生成的定义! 不知您能否明白我的意思?
      

  6.   

    >>>就是在设计模式下??? design-time?到底是运行时还是设计时?是设计时,更没理由调用了Dispose>>>还要删除设计器为它生成的定义如果你在设计界面上按删除的话,IDE应该同时去掉对应的编码的,没有的话,那就是VS.NET的BUG了