我要在主窗体中点击一个按钮,然后弹出一个子窗体,在子窗体中输入数据后,主窗体如何获取数据,并根据获取的数据,在主窗体上进行相应的操作?
   极度迷茫啊... 望指教...
头一次发帖,所以分数没多少,还望高手指教..

解决方案 »

  1.   

    用属性啊.主窗体frmMain 在显示frm的事件里:frm f1=new frm(); f1.show();
    f1.str就可以取出子窗体的控件值;最后再f1=null;子窗体:frm 有一个btnOk按钮;public string str;
    在关闭子窗体的事件里:this.Hide()//一定要隐藏,f1.str就没值了;str=TextBox1.Text
      

  2.   

    public string getForm1()
            {
                return this.textBox1.Text;
            } 
    private void About_Load(object sender, EventArgs e)
            {
                rcode r=new rcode();
                this.label1.Text = r.getForm1();
            }也可以到designer.cs中把要传的东西改成public
      

  3.   

    楼主是不是这个意思:1、在form2中传进个值然后在from1中拿到这个值?2、另外你拿到这个数据后进行相应的操作是什么意思?不大明白!
    要是1的话你可以这样做:
    在form2中定义一个公有的静态变量,输入那个数据后把那个值赋给这个静态变量。
    然后在form1中拿到这个值。
    要是满足你的需求的话,把分给了哈,哥们穷死拉! :)
      

  4.   

    哎!我要的效果是像windows  CTRL+F 查找的实现,大家可以按CTRL+F然后出来查找界面,大家可以试试.因为他是在查找的内容是在主窗体上,因此我点查找下一个的时候,就要在主窗体中查找内容,如果查到的话就要把他标识出来,就是这样的一个效果,请问大家有解决的方法吗?我想可能要用到委托和事件把?可是目前我对事件不是很明白,希望大家给个正确的思路和方法''谢谢!分数不多,但是解决了一定加分..呵呵
      

  5.   

    最近刚好做了一个这样的查询基类窗体,给段代码给楼主看看~
    父窗体。        /// <summary>
            /// 点击查询菜单项。
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void miFind_Click(object sender, EventArgs e)
            {
                RowLocater f = new RowLocater(dgGrid);
                f.Show();
            }
    子窗体。        /// <summary>
            /// 实例化一个查询窗体。
            /// 注意将TopMost属性设为true。
            /// </summary>
            /// <param name="Grid"></param>
            public RowLocater(DataGridView Grid)
            {
                InitializeComponent();
                DataGridView = Grid;
                cmbMatchType.SelectedIndex = 1;
            }
    /// <summary>
            /// 点击查询按钮。
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void btnAccept_Click(object sender, EventArgs e)
            {
                bool hasFind = false;
                if (dg.CurrentRow == null) return;
                int beginIndex = dg.CurrentRow.Index;
                int i = beginIndex + 1;
                while (i != beginIndex)
                {
                    if (i > dg.Rows.Count - 1)
                    {
                        i = 0;
                        hasFind = FindKey(i);
                        if (hasFind)
                            break;
                        else
                            continue;
                    }
                    hasFind = FindKey(i);
                    if (hasFind) break;
                    i++;
                }            if (!hasFind)
                {
                    MessageBox.Show("搜索完成!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
      

  6.   

    在主窗体中
    将frmSecond fs =new frmSecond(string name,string id);
    fs.Show();在另一个窗体中的构造函数中接收这几个参数就行了
      

  7.   


    CON-如何在子窗体(被调用者)中实现对其父窗体(调用者)的刷新呢?
    网络上有几种方法,先总结如下:
    调用窗体(父):Form1,被调用窗体(子):Form2
    方法1: 所有权法
    //Form1:
    //需要有一个公共的刷新方法
    public void Refresh_Method()
    {
    //...
    }
    //在调用Form2时,要把Form2的所有者设为Form1
    Form2 f2 = new Form2() ;
    f2.Owner = this;
    f2.ShowDialog() ;
    //Form2:
    //在需要对其调用者(父)刷新时
    Form1 f1 ;
    f1 = (Form1)this.Owner;
    f1.Refresh_Method() ;
    方法2:自身传递法
    //Form1:
    //需要有一个公共的刷新方法
    public void Refresh_Method()
    {
    //...
    }
    Form2 f2 = new Form2() ;
    f2.ShowDialog(this) ;
    //Form2:
    private Form1 p_f1;
    public Form2(Form1 f1)
    {
    InitializeComponent();
    p_f1 = f1;
    }
    //刷新时
    p_f1.Refresh_Method() ;
    方法3:属性法
    //Form1:
    //需要有一个公共的刷新方法
    public void Refresh_Method()
    {
    //...
    }
    //调用时
    Form2 f2 = new Form2() ;
    f2.P_F1 = this;
    f2.Show() ;//Form2:
    private Form1 p_f1;
    public Form1 P_F1
    {
    get{return p_f1;}
    set{p_f1 = value;}
    }
    //刷新时
    p_f1.Refresh_Method() ;
    方法4:委托法
    //声明一个委托
    public delegate void DisplayUpdate();
    //Form1:
    //需要有一个公共的刷新方法
    public void Refresh_Method()
    {
    //...
    }
    //调用时
    Form2 f2 = new Form2() ;
    f2.ShowUpdate += new DisplayUpdate(Refresh_Method) ;
    f2.Show() ;
    //Form2:
    //声明事件
    public event DisplayUpdate ShowUpdate;
    //刷新时,放在需要执行刷新的事件里
    ShowUpdate();
      

  8.   

    这种问题太多了,baidu下大把的!
      

  9.   

    子窗体上:
    public delegate void ChildFormSendMessage(string a,bool b);
    public ChildFormSendMessage btnSaveClick;private btnSave_Click(object sender,EventArgs e)
    {
    if(btnSaveClick!=null)
    {
    btnSaveClick(this.txtBoxName.Text,This.chkBoxIsNew.Checked);
    }
    }父窗体上
     ChildForm c=new ChildForm();
    c.btnSaveClick+=new ChildFormSendMessage(process);
    c.show();
    private void process(string a, bool b)
    {
    ....
    }
      

  10.   

    Ctrl+F 查找对话框是点击查找按钮就发生一个事件,主窗体定制此事件,在发生此事件后主窗体从对话框获取值(可以用属性,或自定义事件参数,将需要的值放在参数中),然后主窗体中执行查询。Main:
    private void OpenDialog()
    {
       CustomeDialog cd = new CustomeDialog();
       cd.CustomeEventHandle += new EventHandler(cd_CustomeEventHandler);   cd.show();
    }private void cd_CustomeEventHandler(object sender, EventArgs e)
    {
        string needValue = (sender as CustomeDialog).CustomProperty;//从对话框获取需要的值,
         //这样其他的编写就简单了     
    }Dialog:
    属性:
    public string CustomProperty
    {
      get{return xx;}
    }
    定义事件:public event EventHandler CustomeEventHandler;需要执行的按钮事件:
    private void Click(object sender, EventArgs e)
    {
       this.xx = textBox1.text;
       
       if(null !=  CustomeEventHandler)
       {
          CustomeEventHandler(this, EventArgs.Empty);//EventArgs可以自定义,这里从属性获取值,所以事件参数为空
       }   //this.close();//如果需要关闭此对话框加上这句
    }
      

  11.   

    你可以在csdn下载我的习题,搜索xuxiang19840814资源多窗体的应用即可
      

  12.   

    前两天我自己刚刚琢磨出来怎么做,现在总算对事件有一个初步的了解了,解决方法和jason_mf 的比较接近,唉,总算告一段落了,顺便问一下大家,怎么结贴啊........?
      

  13.   

       进入你的帖子,左上角有个“管理帖子”按钮,进入然后在右边的分数栏里给分,然后在1楼上边有个输入密码框,输入密码点“结帖”就ok了。给点分啊楼主,哥们穷人啊,hoho...