在WinForm中,引用一个控件的父对象用ControlName.Parent如果是我有一个组件(不可见的,类似于printDialog组件),通过这个组件想得到Form对像时应该怎么处理?新手入门,请大家指导.

解决方案 »

  1.   

    你可以这样
    Control p = this.Parent;
    while(p.Parent != null) p = this.Parent;
    //这里p就是最顶层的容器
    Form form = p as Form;
    form就是窗体
      

  2.   

    如果是control,一楼的方法挺好的。
    如果不是,那建议你把父窗体对象传过去;如果传过去不现实,传句柄。消息在窗体之间是能行无阻的。 
      

  3.   

    public class MyComponent : Component
    {
        //重载这个属性
        public override ISite Site
        {
            get
            {
                return base.Site;
            }
            set
            {
                if (value == null)
                {
                    return;
                }
                IDesignerHost host = value.GetService(typeof(IDesignerHost)) as IDesignerHost;
                if (host != null)
                {
                    IComponent componentHost = host.RootComponent;
                    if (componentHost is ContainerControl)
                    {
                        Parent = componentHost as ContainerControl;
                    }
                }
                base.Site = value;
            }
        }    public ContainerControl Parent { get; set; }    public void Test()
        {
            //Parent就是窗体
            MessageBox.Show((Parent == null).ToString());
        }
    }需要重载这个属性。你就可以访问父窗体了。
    你把上面代码复制,粘贴到你项目中,编译,拖到窗体中。可以通过Parent访问到组建的父窗体。你也可以在组建内部通过Parent访问到父窗体。