我用的是C#,如果会用PB或者是Delphi的人可能容易听懂点。
用什么方法可以做一个如PB的child类型窗体,即只能本应用程序的主界面中移动,并且在任务栏中不显示?
还有就是如何写一个函数来统一每个窗体的new和show的过程?
谢谢了。

解决方案 »

  1.   

    1.MDI窗体可以实现,子窗体的showintaskicon(可能写的不准确)设置为false就不会在任务栏显示了
    2.暂时说不清楚
      

  2.   

    ShowInTaskbar = false
    确实不会在任务栏上显示,但是我的主界面是最大化的,这样一点主界面,这个窗体就失去焦点了,看不见了。
      

  3.   

    如何写一个函数来统一每个窗体的new和show的过程? 你最好做一个Form的基类,在你的基类中如果需要的话重写new和show方法,然后其他的窗体继承该Form基类。
      

  4.   

    不是要重写new和show,而是写一个函数来代替new和show,这样不用每次都调用new,再show,直接调用这个函数就行了。
      

  5.   

    还有就是如何写一个函数来统一每个窗体的new和show的过程? 自定义一个窗体的父类就可以了吧,所有页面继承于该类
      

  6.   

    用ShowDialogchildForm.parent=parentForm;
    childForm.ShowDialog(childForm.parent);
      

  7.   

    主窗体设置为MDI容器,其他的为MDI child.
    并且用单件模式调用窗体.
      

  8.   

    主窗体设置为MDI容器,其他的为MDI child.
    并且用单件模式调用窗体.
      

  9.   

    new是实例化,应该是必须的,你试试能不能把show的调用写到构造函数的最后.
      

  10.   

    对,mdi,http://industry.ccidnet.com/art/1137/20020221/9770_1.html
      

  11.   

    ShowDialog是模式窗体,退出窗体前不能操作其他,不行
      

  12.   

    Form child = new Form();
    //不会被挡住了
    child.TopMost = true;
      

  13.   

    你是不是要同时开多个子窗口,所以不用ShowDialog?
      

  14.   

    还有就是如何写一个函数来统一每个窗体的new和show的过程?
    就相当于动态创建窗体,并且显示,不知各位明白了没?
      

  15.   


    控制窗口不能移动到主窗口外边,还没想到好办法。在窗体Move事件中判断边界,越界了就放回边界上,我试了这种方法,效果不行,会闪烁。用一个函数管理窗口的new和show 比较简单。
    private List<Form> _listForm = new List<Form>();
            private void button1_Click(object sender, EventArgs e)
            {
                int count = _listForm.Count;
                showForm("窗体" + count);
            }
            private Form showForm(string title)
            {
                
                Form form = new Form();
                form.Text = title;
                //form.TopMost = true;
                form.FormClosed += new FormClosedEventHandler(form_FormClosed);
                
                _listForm.Add(form);            form.Show();
                return form;
            }        void form_FormClosed(object sender, FormClosedEventArgs e)
            {
                _listForm.Remove(sender as Form);
            }
      

  16.   


    w_parentwindow mywindow = new w_parentwindow();
    mywindow.Show();我是想写一函数,可以创建除w_parentwindow的任何类型的窗体
    我想,你写的应该不行。你那是new一个空白窗体,除非可以动态继承。要不,达不到效果。
      

  17.   

    一.简单的是用ShowDialog()
    二.复杂的是用单例模式
      

  18.   


    要new任何窗体,要不就传一个窗体类型type做参数。Form form = System.Activator.CreateInstance(type) as Form;private List<Form> _listForm = new List<Form>();
            private void button1_Click(object sender, EventArgs e)
            {
                int count = _listForm.Count;
                //创建不同类型的Form
                showForm(typeof(FormAlarm),"窗体" + count);
                showForm(typeof(FormDrag), "窗体" + (count +1));
            }
            private Form showForm(string title)
            {
                
                //Form form = new Form();
                Form form = System.Activator.CreateInstance(type) as Form;
                form.Text = title;
                //form.TopMost = true;
                form.FormClosed += new FormClosedEventHandler(form_FormClosed);
                
                _listForm.Add(form);            form.Show();
                return form;
            }        void form_FormClosed(object sender, FormClosedEventArgs e)
            {
                _listForm.Remove(sender as Form);
            }
      

  19.   


    showForm(w_parentwindow,"test");//w_parentwindow是一个窗体类
    错误信息:w_parentwindow是类型,但此处被当作变量使用
      

  20.   

    想到个偷懒的方法,可以试试:直接在主窗体中放个容器Panel,占满整个窗体,这样子窗体在容器里显示,可以移动,最小化时就到了窗体左下角,不在任务栏中~
      

  21.   

    当您的问题得到解答并完成结帖操作,CSDN将按本帖提问分数的50%,做为可用分返还给您。