本帖最后由 gatx177 于 2011-10-21 15:58:02 编辑

解决方案 »

  1.   

    那就换一种传值方式撒
    比如静态类传值Public static class test
    {
        public static string value;
    }
    form1:
    string str=textbox1.Text.Trim();
    test.value=str;
    form2:
    string str=test.value;//这就是textbox1的值
      

  2.   

    哎  你这表达 能力 ~ 你得 意思 是 
    在 FORM1 中 打开 Form2 然后 关闭 Form2 的时候 把值传回 FORM1 么?
      

  3.   


    //这种问题多到不怎么想回答了,别处拔来的代码,你看懂了,就一定会做了.
    public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }        //
            private void btnXuanZe_Click(object sender, EventArgs e)
            {
                Form3 f3 = new Form3();
                f3.addEvent += new Form3.AddName(DisplayName);
                f3.Show();
            }        private void DisplayName(StringBuilder strName)
            {
                string[] name = strName.ToString().Split(';');
                for (int i = 0; i < name.Length - 1; i++)
                {
                    txtName.AppendText(string.Format("您选择了:{0}..\r\n", name[i]));
                }
            }        private void btnClose_Click(object sender, EventArgs e)
            {
                this.Close();
            }
        }public partial class Form3 : Form
        {
            public Form3()
            {
                InitializeComponent();
            }        TreeNode tt;
            public delegate void AddName(StringBuilder nameStr);
            public event AddName addEvent;        private void Form3_Load(object sender, EventArgs e)
            {
                tt = new TreeNode();
                TreeNode[] tt1 = new TreeNode[20];
                for (int j = 0; j < tt1.Length; j++)
                {
                    TreeNode t = new TreeNode();
                    t.Text = string.Format("机器人{0}号", j + 1);
                    tt1[j] = t;
                }
                tt = new System.Windows.Forms.TreeNode("姓名选择", tt1);
                tt.ForeColor = System.Drawing.Color.Red;            this.tv.Nodes.Add(tt);
                this.tv.Nodes[0].Expand();
            }        private void btnAdd_Click(object sender, EventArgs e)
            {
                StringBuilder vld = new StringBuilder();
                if (tt.Checked)
                {                for (int i = 0; i < tt.Nodes.Count; i++)
                    {
                        vld.Append(tt.Nodes[i].Text + ";");
                    }
                }
                else
                {
                    for (int i = 0; i < tt.Nodes.Count; i++)
                    {
                        if (tt.Nodes[i].Checked)
                        {
                            vld.Append(tt.Nodes[i].Text + ";");
                        }
                    }
                }
                add(vld);
                this.Dispose();
                return;
            }        private void add(StringBuilder name)
            {
                if (addEvent != null)
                {
                    addEvent(name);
                }
            }        private void btnClose_Click(object sender, EventArgs e)
            {
                this.Close();
            }
        }
      

  4.   

    如果是这样 有好多种方法1. 静态字段 (2楼那种方法)
    2. 写一个方法 把FORM1 作为 参数 传入 在 FORM2 中 直接 改 FORM1 的属性 就行了 (这样 你得确保是一个对象   可以用单立模式)
    3. 委托事件
    4.公共类
      

  5.   

    这个方法不是没试过但是不行 例如当前点击按钮弹出窗口从窗口内获得想要的值 回传到主窗口 点击后无值点击第二次返回的是第一次的值 关键是用show 方法后当前点击事件结束了
    代码如下
     private void button2_Click(object sender, EventArgs e)
            {
                //DataRow dr = frmSelectItem.drReturn;
                frmContiner frmcontiner = new frmContiner();
                frmSelectItem f = new frmSelectItem();            f.strSql = "select Target_ID,Target_Desc from dbo_Target";
                f.strColumn = ",目标人群";
                f.strVisable = "0,1";
               
                f.ShowDialog(this);//或者用f.show();打开新窗体获取数据            SplitContainer split = (SplitContainer)Parent.Parent;//将窗体放到SplitContainer
                split.Panel2.Controls.Clear();
                f.TopLevel = false;            split.Panel2.Controls.Add(f);            //f.Show();            DataRow dr = f.drReturn;//从窗体中获取点击所选的值
                if (dr!= null)
                {
                    this.txtTargetAudience.Tag = dr["Target_ID"].ToString();
                    this.txtTargetAudience.Text = dr["Target_Desc"].ToString();
                }
                this.Refresh();
                
                dr = null;
               
            }
      

  6.   

    ShowDialog() 是显示模式对话框的方法, Show() 就是单纯地显示窗体. 想窗口之间传值或者句柄就给窗体添加属性.
      

  7.   

    把子窗体要回传的值放到公共属性中,在你的子窗体关闭事件中,把sender取出来,转成对应的类型,然后读取子窗体的这个属性,应该就行了。
      

  8.   

    一个模态框,一个非模态框,
    焦点的问题,可以google一下