本帖最后由 saynowhy 于 2011-03-12 00:31:41 编辑

解决方案 »

  1.   

    1 你是new form1,然后new form2 最后取得form2的值到form1中? 感觉实现怪怪的。可以在form2中定义一个委托事件,当form2中textbox有值之后通知form1。
    2 直接调用事件绑定的方法,sender是引发的源,eventarg是参数。没有特别处理都为null就行
      

  2.   

    通常,设计一个组件它要隐藏内部实现,而仅仅暴露数据。所以窗体通常只应该暴露一个具有业务意义定义的string属性。这样,主窗体通过子窗体的这个属性来与之通讯,而并不应该想当然地去假设它内部是textbox还是别的什么控件来实现这个业务需求。当然,没有多少设计经验的人可能更喜欢暴露一个TextBox类型的只读属性,也就是在子窗体的对外接口上暴露控件(尽管这也是隐藏了内部的控件树结构的)。
      

  3.   

    至于第二个问题,就相当“无厘头”了。事件是由对象自己触发的。如果是指这个对象的客户程序,它只能向对象注册事件处理程序,然后等着对方触发自己的回调程序。如果是指这个对象本身,那么你把触发两个事件的代码分别写一遍就行了,例如void Calculate(){
      if(this.BeforeCalculate!=null)
           this.BeforeCalculate(....);
      //进行计算
      if(this.AfterCalculate!=null)
           this.AfterCalculate(....);
    }  我猜你说的是第一种“如果”。作为客户程序,根本没有权利去触发别的对象的事件,它只能等着被监听的对象触发事件。也就不存在什么引用另外一个事件的问题。此时,如果你在两个事件处理程序中有相同的处理代码,那么调用同一个方法就行了,用不着操心去想是否“一个事件引用其它事件”。
      

  4.   

    举个例子吧。假设在处理key_press事件的代码中有一段代码跟处理mouse_doubleclick事件的代码中相同的内容,那么你在两个事件处理程序中去调用同一个方法就行了,用不着操心说自己监听的对象触发 key_press 时还要要求它“引用mouse_doubleclick事件”这种奇怪的想法。
      

  5.   

    public Form1:Form
    {
        public Form2 F2 = null;
        public void Foo()
        {
            if(F2 == null) return;
            F2.Something();
        }
        public void OpenForm2()
        {
            F2 = new Form2();
            F2.Show();
        }
    }
    F2 略
      

  6.   

    form2 中设置属性public string ss { get { return this.textBox1.Text; } set { this.textBox1.Text = value; } }
    from1 中
    from2 ss=new from2();
     string ss= ss.ss
      

  7.   


    一般是这样...不过看LZ的问题好像有问题...主窗体在启动时调用子窗体...主窗体没启动前哪来的子窗体啊..是不是在新建子窗体form2时,传递textBox.........