forma:
定义
private string xsm;
界面上添加TextBox1
按钮Button1打开弹出的模式窗口
 private void tbm_findrecord_Click(object sender, EventArgs e)
        {
            xsm="0";//初始化xsm的值
            formb sform1 = new formb(ref xsm);
            sform1.ShowDialog();
            if (sform1.DialogResult == DialogResult.OK)
            {
                TextBox1.Text = xsm;
            }
            else if (sform1.DialogResult == DialogResult.Cancel)
            {
                TextBox1.Text = "推出了";
            }
        }
要弹出的窗口formb的设计
定义
private string strxsm;   
添加构造函数
public searchterm(ref string xsm)
        {
            InitializeComponent();
            strxsm=xsm;
        }
界面上添加name为gettext的textbox控件
确定按钮,取消按钮
当点击确定按钮时 将输入textbox控件的 值回传给原来的窗体,并在TextBox1中显示
点击确定按钮代码如下: 
private void btn_ok_Click(object sender, EventArgs e)
        {
            strxsm=gettext.Text;
            this.DialogResult = DialogResult.OK;
            this.Close();
        }
点击取消按钮代码如下
private void btn_cancel_Click(object sender, EventArgs e)
        {
            this.DialogResult = DialogResult.Cancel;
            this.Close();
        }
现在的问题是这样弹出窗口的值不会回传,怎么样才原来的窗体中能得到弹出窗体的值?

解决方案 »

  1.   

    把private string xsm;
    改为
    class MyString
    {
         private string str;
         public MyString(){str = "";}
         public string MystringValue
        {
              get
              {
                  return str;
               }
               set
               {
                   str = value;
                }
         }
    }然后把这个类的实例作为form b的参数传进去
      

  2.   

    关键是string类的特殊性的问题,所以要封装一下
    或者你这几封装
    struct Mystring
    {
        public string str;
    }
    把这个struct的对象,按照ref传到form b里面也可以
      

  3.   

    strxsm=xsm;
    不表式strxsm是一个ref的xsm解决方式是给对话框加一个属性可以读取strxsm,然后读取对话框的这个属性或者用class把xsm包装一下,用这个包装过的class替代xsm
      

  4.   

    参见http://blog.csdn.net/tjvictor/archive/2006/06/23/824617.aspx