有兩個form,form1和form2。
form1裏面有一個form1_TextBox和一個form1_Button,form2裏面也有一個form2_TextBox和一個form2_Button;
點擊form1裏面的form1_Button打開form2,然後在form2裏面的文本框裏面輸入文本,點擊form2_Button關閉form2,同時把form2_TextBox裏面的文本顯示在form1_TextBox中;
注意:form1窗體的狀態為打開狀態
下面是我的解決方案,可是不行,麻煩各位大俠給我指點指點!
form1的代碼:
 public  string _designElements;        public string DesignElements
        {
            get { return RD_ExpressionTxtRulExpression.Text= _designElements; }
            set { _designElements = value; }
        }form2的代碼:
private void RD_AlreadyBtnClose_Click(object sender, EventArgs e)
        {
            RuleDesignExpression rdExpres = new RuleDesignExpression();
            rdExpres.Refresh();
            rdExpres._designElements = RD_AlreadyTxt.Text;
            
            this.Close();
            
            
            //this.Dispose();
        }

解决方案 »

  1.   

    先设置form2_TextBox的Modifiers为Public,然后private void form1_Button_Click(object sender, EventArgs e)
    {
        Form2 form2=new Form2();
        form2.ShowDialog()
        form1_TextBox.Text = form2_TextBox.Text;
    }
      

  2.   

    Form1namespace Test
    {
        public partial class Form1 : Form
        {
            
            public Form1()
            {           
                InitializeComponent();
            }
            //两个构造函数,一个有参数一个没参数,有参数的用来传递Form2中输入的文本
            public Form1(string Text)
            {
                InitializeComponent();
                //MessageBox.Show("修改"+ID);
                this.form1_TextBox.Text = Text;
            }
            private void form1_Button_Click(object sender, EventArgs e)
            {
               Form2 f = new Form2();
               f.show();
            }
    }Form2namespace Test
    {
        public partial class Form2 : Form
        {
            public Form2()
            {           
                InitializeComponent();
            }
        }
        private void form2_Button_Click(object sender, EventArgs e)
        {
            Form1 f = new Form(form2_TextBox.Text);
            f.show();
            this.close();
        }
    }
      

  3.   

    首先创建一个父窗体form1,拥有一下控件:textBox1,button1;
    再创建一个子窗体form2,拥有控件:textBox2,button2;
    (首先描述一下整个过程:当点击form1的button1时,打开form2窗口,然后在textBox2里面输入任意值,当点击button2时,将textBox2的值传给textBox1,即实现窗体间传值)
     
    第一种方法:
    在button1的单击事件中写入如下代码:
    form2 f2 = new form2();
    f2.ShowDialog(this);
     
    在button2的单击事件中写入如下代码:
    form1 f1 = (form1)this.owner;
    f1.textBox1.text =this.textBox2.text;
    运行即可实现传值。
     
     
    第二种方法:
    在button1的单击事件中写入如下代码:
    form2 f2 = new form2(this);
    f2.ShowDialog();
     
    在窗体form2的窗体类中声明变量,并改写初始化构造函数如下:
    form1 form1;
    public form2(form1 f1)
    {
    InitializeComponent();
    form1 = f1;
    }
     
    在button1的点击事件中写入如下代码:
    form1.textBox1.text = this.textBox2.text;
    运行即可实现传值。
     
    注:textbox1的Modifiers(控件的可见性级别,即修饰符)应为:public ,internal,protected中之一,不能为private(私有)。
      

  4.   

     
    form2的代碼
    //設置窗體只能被打開一次
            public static ChoiceDesignElement openElementForm()
            {
                if (designElement == null)
                {
                    designElement = new ChoiceDesignElement();
                }
                return designElement;
            }
    form1的代碼
    private void RD_ExpressionBtn_Element_Click(object sender, EventArgs e)
            {
                ChoiceDesignElement element = ChoiceDesignElement.openElementForm();
                //ChoiceDesignElement ele = new ChoiceDesignElement();
                element.Show();           // RD_ExpressionTxtRulExpression.Text = element.RD_AlreadyTxt.Text;
            }
    我用了一個單利模式,控制form2只能打開一次
    這是form2中關閉按鈕的代碼
     private void RD_AlreadyBtnClose_Click(object sender, EventArgs e)
            {
                RuleDesignExpression rdExpres = new RuleDesignExpression();
                //rdExpres.Refresh();
                //rdExpres._designElements = RD_AlreadyTxt.Text;
                this.Close();
                rdExpres.Refresh();
                rdExpres.RD_ExpressionTxtRulExpression.Text = this.RD_AlreadyTxt.Text;
              
                //this.Dispose();
            }可是還是不能實現傳值4樓的方式和3樓的方式我也試過了,可是還是不行,不知道是什麽原因呢?
      

  5.   

    現在的問題在於如果我重新打開form1的話,是可以實現數據傳遞的,但是現在我的form1的狀態時已經打開的狀態