有两个窗体 form1 和form2 点击form1 上的一个按钮弹出form2,这是form1上的按钮代码。
        private void button2_Click(object sender, EventArgs e)
        {
            Form2 f=new Form2();
            f.ShowDialog();            
        }
form2上也有一个按钮点击的时候会给form1回传一个值。form1把这个值显示在控件上,这是form2的按钮点击事件,我通过调用form1 的一个public方法传值给form1
        private void button1_Click(object sender, EventArgs e)
        {
            Form1 f = new Form1();
            f.Form2Close("要传值的数据");
            this.Close();
           
        }
然后form1 的Form2Close方法这样写的
        public void Form2Close(string returnValue)
        {
            listBox1.Items.Add(returnValue);
            MessageBox.Show(returnValue);
        }
我想让form1 的listBox1添加进来这个值。但是关闭form2执行这个方法以后listBox1并没有添加进去相应的值,但是MessageBox.Show(returnValue);却可以显示出传过来的值,我估计是因为form1的listBox1没有刷新的原因,小弟刚接触winform,还请大家指教解决方法。

解决方案 »

  1.   

    在FORM1窗体申明一个静态成员
    public partial class Form1 : Form
        {
            public static string s1;按钮事件打开FORM2窗体用ShowDialog后用命令语句赋值
            private void button2_Click(object sender, EventArgs e)
            {
                Form2 frm2 = new Form2();
                frm2.ShowDialog();
                textBox1.Text = s1;
            }
    FORM2按钮事件给FORM1窗体的静态成员赋值,然后关闭        public Form2()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {
                Form1.s1 = "aabbcc";
                this.Close();
            }
      

  2.   

    楼上的意思是由于我实例化了一个新的form1
     Form1 f = new Form1();
    这样再调用的时候调用的是 新form1的方法,而不是原来的form1的,所以不能改变原form1的值?
      

  3.   

    弹出form2窗体时,直接将form1对象传到form2中,这样在form2就可以访问form1对象了,也就可以操作form1中的东西了
      

  4.   

    listBox1.Items.Add(returnValue);
    这里有错啊,LISTBOX是FORM1的吧,你在FORM2上能用,就算你改了它的作用域为PUBLIC,这样就破坏了封装性,你得用构造函数传参数
    Form2 f2;
            public Form1(Form2 f2)
            {
                InitializeComponent();
                this.f2 = f2;
                if(f2._str != null)
                listBox1.Items.Add(f2._str.ToString());
            }private string str;        public string  _str
            {
                get
                {
                    return str;
                }
                set
                {
                    str = value;
                }
            }
            private void button1_Click(object sender, EventArgs e)
            {
                str = "andybang";
                Form1 f1 = new Form1(this);
                f1.Show();
            }
      

  5.   

    你点form2上的按钮,
    传给form1的值,
    然后把form2关掉,this.close();
    //不需要new form1()了。
      

  6.   


    我觉得1楼说的有一定道理,你的传值可能有点问题,跟踪一下listBox1.Items.Add(returnValue)看看Items里面有没有数据。如果有的话,建议加条语句this.Refresh();
    或者
    listBox1.Refresh();试一试
      

  7.   


    显然是这个问题啊。在Form2里面设置一个:
    property Form1 ParentForm{get;set;}然后在form1的事件中:
    private void button2_Click(object sender, EventArgs e)
      {
      Form2 f=new Form2();
      f.ParentForm = this;
      f.ShowDialog();  
      }在form2的事件中:
      private void button1_Click(object sender, EventArgs e)
      {
      ParentForm.Form2Close("要传值的数据");
      this.Close();
      }