none
在主窗口要调用其他窗口,要怎样才能使主窗口控件在其他窗口中可见? RRS feed

  • 问题

  • 也就是说怎样才能在其他窗口中可以使用到主窗口中的控件,而不会出现未声明的标识符?

    新手上路,大神指点!

    • 已移动 VisualEleven 2012年8月13日 2:31 C# problem (发件人:Visual C++)
    2012年8月10日 3:43

答案

  • 一般情况下,我们不提倡在一个窗口操作另一个窗口的控件,你可以使用委托来实现类似功能。比如下面的例子:

    public delegate void ResetMainFormEnventHandler(object parameter);
    
    public class Form1:Form
    {
        public void ShowChildForm()
        {
            Form2 form=new Form2();
            form.ResetMainForm += new ResetMainFormEnventHandler(this.RefreshForm);
            form.ShowDialog();
        }
        
        public void RefreshForm(object parameter)
        {
             //do something.
        }
    }
    
    public class Form2:Form
    {
        public event ResetMainFormEnventHandler ResetMainForm = null;
    
        ...
    
        //更新主画面
        public void RefreshMainForm(object parameter)
        {
             if(ResetMainForm != null)
             {
                   ResetMainForm(parameter);
             }
        }
    }

    2012年8月15日 4:44

全部回复

  • 也就是说怎样才能在其他窗口中可以使用到主窗口中的控件,而不会出现未声明的标识符?

    新手上路,大神指点!


    是在.net里面的。

    新手上路,大神指点!

    2012年8月10日 3:44
  • 你好,这个问题我也碰到过,不过我是采用传值的方式来跳过直接调用的。。。

    就是子窗口把值传给父窗口的变量,这个变量可以是动态显示的,或者在主窗口上捕获子窗口的变量。

    如果直接调用的话,include file不行。。。


    Please not forget mark your answer, and unmark your disagreed point.

    2012年8月13日 8:11
  • 一般情况下,我们不提倡在一个窗口操作另一个窗口的控件,你可以使用委托来实现类似功能。比如下面的例子:

    public delegate void ResetMainFormEnventHandler(object parameter);
    
    public class Form1:Form
    {
        public void ShowChildForm()
        {
            Form2 form=new Form2();
            form.ResetMainForm += new ResetMainFormEnventHandler(this.RefreshForm);
            form.ShowDialog();
        }
        
        public void RefreshForm(object parameter)
        {
             //do something.
        }
    }
    
    public class Form2:Form
    {
        public event ResetMainFormEnventHandler ResetMainForm = null;
    
        ...
    
        //更新主画面
        public void RefreshMainForm(object parameter)
        {
             if(ResetMainForm != null)
             {
                   ResetMainForm(parameter);
             }
        }
    }

    2012年8月15日 4:44
  • 嗯嗯,用数据传送的方法确实不错。能不能说一下你是怎样把子窗口的值传给父窗口的变量呢?谢谢!我用保存图片的方法,但不行。

    新手上路,大神指点!

    2012年8月16日 2:46
  • 可以用全局变量的方法,具体你可以看这个链接:

    http://social.microsoft.com/Forums/zh-CN/visualcpluszhchs/thread/f7b8263d-1ca2-436c-a545-604de49c882e


    Please not forget mark your answer, and unmark your disagreed point.

    2012年8月16日 3:03
  • 嗯嗯,用数据传送的方法确实不错。能不能说一下你是怎样把子窗口的值传给父窗口的变量呢?谢谢!我用保存图片的方法,但不行。

    新手上路,大神指点!


    看我上面的回复,通过委托来传递参数给主窗口,而主窗口也有接收的方法来处理这个参数。
    2012年8月16日 3:07