如:有Form1和Form2
Form2中有一Button,它的Click事件改变了一个变量S的值我在Form1中调用Form2,怎么样才能获取这个改变了的S的值我在Form1中这样写:
Form2 f2 = new Form2();
f2.show();S = f2.S;这样写是得不到S的值的,因为Form2中的button的事件没有发生,所以该怎么样才能获取到这个S的值

谢谢各位的帮助,谢谢了

解决方案 »

  1.   

    1. f2.showdialog() 然后 s= f2.s.2. 在 Form2 中定义自定义事件。
    public delegate void SChangeEventHandler(int s);//事件处理程序需要的参数列表
    public virtual event SChangeEventHandler SChange;//定义自己的事件在Form2中的 Button_Click()中加上
    if (SChange != null)
    {
       SChange(s);
    }在 Form1中  Form2 f2 = new Form2();
    后加上
    f2.SChange += new Form2.SChangeEventHandler(On_SChange);private void On_SChange(int s)
    {
     //此处在Form1中得到s的值
     MessageBox.Show(s.ToString());
    }
      

  2.   

    好的!我不知道
    public delegate void SChangeEventHandler(int s);//事件处理程序需要的参数列表
    public virtual event SChangeEventHandler SChange;//定义自己的事件
    该怎么用,
      

  3.   

    放在你Form2的Class里面,头部。是申明你的自定义事件的。
      

  4.   

    你这样是得不到S的值的,在执行S = f2.S;这个语句时,f2已经被关闭,所以是得不到它的变量 S的值的,最简单的方法是建一个类,例如
    public class Info
    {
        public string S="";
    }接着增加Info类型的变量和一个Form2的析构函数,
    Info _info;
    public From2(Info info)
    {
     this._info=info;
     InitializeComponent();
    }
    在Form2的按钮事件中更改this._info里面的变量的值就可以了
    例如: this._info.S="Button event";最后就可以这样了
    Info info=new Info();
    Form2 f2 = new Form2(info);
    f2.show();
    S=info.S;
    这样就可以获得!
      

  5.   

    你具体是要实现什么呢?是只需要得到Form2里面变量s的值,还是要当s改变时通知Form1呢?
    如果只是想得到变量s的值就比较简单了.
    在定义时,需要定义对外公布的属性,以获取变量
    如下:
    class Form2
    {
    //参数列表
    ....
    private string s = string.Empty;
    // 定义获取s值的属性
    public string SValueProperty
    {
      get
    {
      return s;
    }
    }
    }然后你在Form1里面就可以取得(new Form2()).SValueProperty的值了.
      

  6.   

    不过你要确保,你获取的Form2对象和你正在使用的Form2对象是同一个,也就是说
    Form2 frm = new Form2();
    frm.Show();之后你取的时候一定要确保这个对象没有被重新创建过,否则,你只能取到SValueProperty的初始值,也就是string.Empty.
      

  7.   

    如果你要在button1点击一下就发送s的值给Form1的话,就要用到事件了.
    不过也不用自定义.只要在button1_Click里面写就好了, private void button1_Click(object sender, System.EventArgs e)
    {
                          s = "aaaaa";
        Form1.GetSValue(string s);
    }这样作,你需要在Form1里面定义一个公共的static方法,如下:
    class Form1
    {
    ....
    // 获取s值的方法
    public static void GetSValue(string s)
    {
     // 作你想要的操作
    }
    }
      

  8.   

    谢谢各位的精彩解答,你们说的方法都很正确,问题我也解决了.给分了 shicj(shicj)(15)
           Flashcom(虫虫)(15)  
           Kshatriya(无聊) (10)