比较急……分不够可以再给……公司的一个项目,需要用.net完成一个编辑器,要求如下:类似VS2005的解决方案资源管理器、类视图、资源视图那样,既可以拖出来作为单独的窗口,也可以分别嵌到VS2005的上下左右,并与其他视图组合。这个该怎么做呢?最起码的,就要它固定嵌到父窗口的左侧,同时也可以拖出来成为一个单独的Form,那又该怎么办呢?

解决方案 »

  1.   

    用面板是否可行??
    没做过WINFORM,不太清楚哦
      

  2.   

    把Form的TopLeve设置为False
    或者
    把Form的边设置为None都可以把它嵌入另一个容器中.
      

  3.   

    比如如下的两个方法都可以做到:Form f = new Form();
    f.TopLevel = false;
    f.Visible = true;
    this.Controls.Add(f);
    -------------
    Form f = new Form();
    f.FormBorderStyle = FormBorderStyle.None;
    f.Visible = true;
    this.Controls.Add(f);
      

  4.   

    多谢hbxtlhx(平民百姓),我去试试。
    我用的是CLI,还不完全是C#,公司没有专职。net程序员,我算是被赶鸭子上架,才学了两天…… T_T
    另外想问一下:
    您说的TopLevel是否是指TopMost?然后Form的边是否是指FormBoarderStyle?我是这么写的:
    this->WindowState = FormWindowState::Maximized; this->Form_Operator = gcnew Operators();
    this->Form_Operator->Owner = this; this->Form_Operator->Parent = this;    // ERROR!!!!! this->Form_Operator->Show();这里This是主窗口,Operators是工具窗口,我想把这个工具窗口嵌入主窗口中,然后就会在Parent那一句报错,说是顶级窗口不能嵌入到另一个顶级窗口中。
      

  5.   

    用这个控件
    http://sourceforge.net/projects/dockpanelsuite/
      

  6.   

    http://sourceforge.net/dbimage.php?id=53439
      

  7.   

    呵呵多谢zhengshaodong,我去看看。另hbxtlhx(平民百姓):多谢你,公司网速慢我提交完回复才看见您的回复。
    现在已经解决了,但是还是有个问题:现在能把窗口嵌入进去了。那该如何把窗口再拖出来作为一个从属于父窗口的浮动窗口呢(就像能把“解决方案资源管理器”拖出来作为浮动窗口一样)?
      

  8.   

    developer express 控件,不过不是免费的
      

  9.   

    刚看了看zhengshaodong给出的连接,很不错,谢谢。还有别的方案么?
      

  10.   

    做成MDI窗体不知道是否可行阿!
      

  11.   

    那该如何把窗口再拖出来作为一个从属于父窗口的浮动窗口呢(就像能把“解决方案资源管理器”拖出来作为浮动窗口一样-------------------------------------------
    一定是选从Controls中,先Remove掉,然后把TopLevel再设置为True了.
    但问题的难点在于你是怎么把它给"拉"出来的,你可以通过ControlPaint来画一个窗体的在桌上的"框"表示可以被拉出这个窗口,然后在鼠标键UP的时候再设置这个窗口从Controls中出来,再设置它的TopLevel属性.
      

  12.   

    比如,我有如下的代码来实现我的说法:Form f = new Form();
    private void button1_Click(object sender, EventArgs e)
    {
    f.TopLevel = false;
    f.Visible = true;
    this.Controls.Add(f);
    }private void button2_Click(object sender, EventArgs e)
    {
    this.Controls.Remove(f);
    f.TopLevel = true;
    }
      

  13.   

    嗯,多谢hbxtlhx(平民百姓),
    我去试一试,如果有不会再另发新帖。
    一会儿就结贴,谢谢众位高手详细的回答 ^_^对给分不满意的,可站内信联系。