当我在Form1中单击一个Button,弹出Form2,在form2里的listbox中选择一个string,这时string显示在Form1中的textBox中,请问这样的值如何传递??

解决方案 »

  1.   

    用 js 父页面
    <script language="javascript">
             function popWin(URLStr, width, height)
            {
              var x = (window.screen.width - width)/2;
              var y = (window.screen.height - height)/2;
              window.open(URLStr, 'ALONE', 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbar=auto,resizable=yes,copyhistory=yes,width='+width+',height='+height+',left='+x+', top='+y+',screenX='+x+',screenY='+y+'');
            }   
        </script>
    后台
    Button.Attributes.Add("onclick", "popWin('Form2.aspx"',800,600);");
    子叶面
    在listbox里加事件
    Response.Write("<script>window.opener.document.getElementById('父页面的控件名').innerText='" + listbox里选择的string+ "'</script>");
      

  2.   

    在From2中设置一个Form1的变量,Form1打开Form2时将自己(this)传递过去即可,在From2中对传过来的Form1的对象操作
      

  3.   

    谢谢!
    不过,我写的是c#桌面程序,不是web程序!
      

  4.   

        在Form2的构造函数里添加一个Form1类型的参数,然后在显示Form2时把Form1当参数传入,这样就可以在Form2里修改Form1上的控件属性了。
      

  5.   


    能在窗体间传递变量的好行只能用静态变量吧!你的意思是在Form1中设置静态变量,让Form1中的textBox和这个静态变量关联,然后在From2中修改Form1中的这个静态变量,textBox的现实跟着变?是这样么?我觉得不妥!还有没有其他更合理的方法呢?
      

  6.   

    比较通用的方法是,写一个类(类的成员函数负责数据传递),这样就可以实现数据共享, 比传递this 要好
      

  7.   

    public static string str;//form1加入全局变量,小心用...要不就form1加个字段
    private string _str;public string GetForm1Str
    {
        set{this._str = value;}
        get{return this._str;}
    }
      

  8.   

    我使用静态变量解决了!但是不如意,应为需要在Form1中多加了一个单击textBox的事件来取得Form2中的静态变量,最好是在Form2修改时Form1中textBox的值同时改变。
      

  9.   


    你的意思是让Form1的textBox.text=_str;然后把Form1自己传到Form2中,在Form2中修改_str的值,进而修改Form1的textBox.text?但是textBox.text还需要从其他地方获取值,并不是只从Form2中获取,所以还是需要事件调用textBox.text=_str。不如直接用public static string str了。
      

  10.   

    可以把一个窗体的控件声明为 public,但不要在代码里改为static,虽然刚改的时候有用,再次打开VS时这static就没有了。