1、在from1 中实例化一个from2对象,通过from2对象可得到from2中为public的属性和方法
2、在from1中定义一个事件,然后在from2中注册该事件,通过该事件处理程序来激发from2中的事件

解决方案 »

  1.   

    能不能给个例子 ?from2中注册该事件 是怎么注册 ? 我还没弄过这个? 听你这么说还是明天了许多
      

  2.   


    注册事件:
    button1.Click += new System.EventHandler(this.button1_Click); 
      

  3.   

    最简单的,把form2的所有成员全部public,然后在form1中声明一个form2类型的对像就可以了。或者,将form2的所有成员全部public static,然后form1中直接可以通过form2.成员名的方式来调用就好了。或者让form2实现一个输出成员的接口,然后由form1来进行调用。
      

  4.   

            static Form2 frm2 = new Form2();//Form2中的button1设置属性公开public
            private void Form1_Load(object sender, EventArgs e)
            {
                frm2.button1.Click += new EventHandler(frm2.button1_Click);//促发Form2中的button1_Click
                frm2.button1.Click += new EventHandler(this.button1_Click);//促发Form1中的button1_Click        }
      

  5.   

      重写Form的构造函数。
    从Form1生成Form3,
     只要在Form3的构造函数中添加参数,
     就可以将Form1中的参数传递给Form3了。运用静态变量。
     在公共变量之前加入static修饰,
    就可以在不同Form之间相互传递参数,
     运用delegate。
    参考
      

  6.   

    private void CreateForm(string strName)
    {
    this.Cursor = Cursors.WaitCursor;string path=AssemblyName;
    string name=strName; Form fm=(Form)Assembly.Load(path).CreateInstance(name);
    fm.MdiParent=this.ParentForm;
    fm.Show();
    fm.Dock=DockStyle.Fill;
    this.Cursor = Cursors.Default;

    通过反射调用窗体
      

  7.   

    反射有点意思,不过Form1和2如果在一个程序集里就没有必要用反射吧。我是新人乱问的哈哈
      

  8.   

    C# code        static Form2 frm2 = new Form2();//Form2中的button1设置属性公开public
            private void Form1_Load(object sender, EventArgs e)
            {
                frm2.button1.Click += new EventHandler(frm2.button1_Click);//促发Form2中的button1_Click
                frm2.button1.Click += new EventHandler(this.button1_Click);//促发Form1中的button1_Click        }使用这个方法 完全没反应  还是触发 不了第二个面板的事件
      

  9.   

    学习下,没具体实践,感觉可以从form1的方法或事件里去调用form2的方法或事件...
      

  10.   

    我贴点代码上来给你看看,不过我这个是用时间返回值的。你自己稍微改动下就好
    把事件写在接口里,比较好管理
    1.接口里写一委托  
    using System;
    using System.Collections.Generic;
    using System.Text;namespace SeaskyFI.UI.Main
    {
        public delegate void ReturnVoucherID(int VchID);
        public interface IReturnVoucherID
        {
            event ReturnVoucherID OnReturnVoucherID;
        }
    }
    2.在form2中使用此接口
    form2:IReturnVoucherID
    public event ReturnVoucherID OnReturnVoucherID;        private void OnReturnVchID(object sender, EventArgs e)
            {
                VchInfo vchInfo = new VchInfo();
                vchInfo = inputControl.Holder;
                if (OnReturnVoucherID != null)
                {
                    OnReturnVoucherID(inputControl.Holder.VCHID);
                    this.DialogResult = DialogResult.OK;
                }
            }
    3.在form1中注册此事件form1 frm1 = new form1 ();
                            frm1 .CreateAssetVoucher(vchInfo);
                            frm1 .OnReturnVoucherID += new ReturnVoucherID(frm1 _OnReturnVoucherID);
                            frm1 .ShowDialog();private void frm1 _OnReturnVoucherID(int VchID)
            {
                try
                {
                    
                }
                catch (Exception ex)
                {
                    ShowMessage(ex);
                }
            }

      

  11.   

    Form1:
    private void btnClose_Click(object sender, EventArgs e)
            {
               // this.Close();            frmCallWeb myForm = new frmCallWeb();
               myForm.btnClose_Click(myForm.btnClose,new EventArgs());           myForm.Show();
            }Form2:
    btnClose 属性设为Public
    public void btnClose_Click(object sender, EventArgs e)//把Private改为public
            {
                label2.Text = "Hello!";
            }
      

  12.   


    这种情况下你想要触发frm2.button1_Click就必须把frm2.button1_Click声明为public...
      

  13.   

    Form1:
    private void btnClose_Click(object sender, EventArgs e)
            {
               // this.Close();            frmCallWeb myForm = new frmCallWeb();
               myForm.btnClose_Click(myForm.btnClose,new EventArgs());           myForm.Show();
            }Form2:
    btnClose 属性设为Public
    public void btnClose_Click(object sender, EventArgs e)//把Private改为public
            {
                label2.Text = "Hello!";
            }
     这个方法实现了 但是 如果我不获取label2.Text的值 我又想不让 form2面板弹出来  而从 form2中获取  dataGridView 中的数据。怎么办?
      

  14.   

     myForm.Show(); 这个去掉就不显示窗体了。那就获取datagridview的数据源。
      

  15.   

    你的Form2 load的时候载入的数据源,你如果不SHOW当然就没有数据了如22楼说的,直接取数据源比较好
      

  16.   

    最简单的方法就是,给被调用窗体添加一个公共静态字段,类型就是要引用的窗体名。
    例:class Form2: Form
    {
      public static Form F2;
      
      public Form2()
      {
        F2 = this;
      }
    }class Form1: Form
    {
      // 这里这样用:
      Form2.F2.控件名.属性
    }
    如果想引用Form2内的其他成员,最简单的是把要引用的成员都改成public类型。不过这样破坏了Form2的封装性。最好的方法是用公共属性来封装这些引用。例如
    class Form2: Form
    {
      public static Form F2;
      private System.Windows.Forms.TextBox textBox1;
      
      public string TextBox
      {
        get {return this.textBox1.Text};
        set {this.textBox1.Text = value};
      }  public Form2()
      {
        F2 = this;
      }
    }class Form1: Form
    {
      // 这里这样用:
      Form2.F2.TextBox = "欢迎楼主";
    }
      

  17.   

    怎么都喜欢把简单事情搞这么复杂的,
        Form F = Application.OpenForms["Form2"];
                // 爱咋整咋整
                TextBox TB = (TextBox)F.Controls.Find("textBox1", true)[0];
                F.Show();
                F.Name = "a";
                F.Paint += new PaintEventHandler(F_Paint); 
            
      

  18.   

    把Form2的属性方法通通设置为public就行了.虽然这种方法不可取.
    用28楼的方法, 在VS中运行代码分析,同样会弹出警告框.认为这是不合理的构造.
      

  19.   

    ,楼上的都说完了,最好的方法是委托,如果是刚学c#建议你
     在form1里面实例化form2 Form2 form2 = new Form2()
    在form1_load事件里面直接 form2.  就可以点出form2的属性方法和时间。
      

  20.   

    这个是属于窗体见胡访问的问题。我写了两篇文章,并提供完整代码。楼主看了以后应该不会再有疑问。
    http://blog.csdn.net/zhzuo/archive/2004/04/05/22027.aspx
    http://blog.csdn.net/zhzuo/archive/2006/05/05/708941.aspx
      

  21.   

    在.NET中利用委托实现窗体间通信
    MainFrm.cs:public partial class MainFrm: Form
    {
     private void MainFrm _Load(object sender, EventArgs e)
     {
      Middle.sendEvent += new Middle.SendMessage(this.DoMethod);
     }
     public void DoMethod(string getstr)
     {
      listBox1.Items.Add(getstr);
     }
    }ChildFrm.cs:public partial class ChildFrm: Form
    {
     public ChildFrm ()
     {
      InitializeComponent();
     }  private void button1_Click(object sender, EventArgs e)
     {
      Middle.DoSendMessage(this.textBox1.Text);
      textBox1.Text = "";
      textBox1.Focus();
     }
    }Middle.cs:public static class Middle
    {
     public delegate void SendMessage(string str);
     public static event SendMessage sendEvent;
     public static void DoSendMessage(string str)
     {
      sendEvent(str);
     }
    }  
    //
    static class Program
    {
     [STAThread]
     static void Main()
     {
      Application.EnableVisualStyles();
      Application.SetCompatibleTextRenderingDefault(false);
      // Application.Run(new Form1());
      Form1 mainFrm = new Form1();
      childFrm secondFrm = new childFrm();
      secondFrm.Show();
      Application.Run(mainFrm);
     }

      

  22.   

    看看这个使用委托的例子Using a delegate to pass data between two forms
      

  23.   

    设定一个静态量pubilic static Form globle=this;
    这时候在任意位置调用 globle就可以了不要忘了给分