从另一个winform获取值并将其传递给当前!

RG-*_*G-3 0 c# winforms

我有2个窗体.第一个在程序启动期间处于活动状态的按钮有一个按钮,其中显示另一个第二个窗体,其中有一个文本字段,用户在其中键入其名称并且HIT正常.

现在在第一种形式中,我有一个变量名:nameproccessed,它从第二种形式获取名称.但问题是我的按钮,这是在第一形式具有除采取的名字更多的功能,我如何能阻止编译器首先采取从第二形态的名称,然后处理函数的其余部分执行的流程???

这是我的代码的片段:

//1st form
//Class1
 public string _nameProcessed = "";



private void btnGetSomething_Click(object sender, EventArgs e)
    {
          if (!showdial())
            return;
            string name = _nameProcessed;
         //some more functionalities in this function!!!
         //This PART is NOT executing....

     }



       private bool showdial()
    {
        InputName inm = new InputName();
        if (inm.ShowDialog() != System.Windows.Forms.DialogResult.OK)
            return false;
        _nameProcessed = inm.name;

        return true;
    }

//2nd form
//Class2
public string name;

 private void btnCancel_Click(object sender, EventArgs e)
    {
        //MessageBox.Show("Please Enter Your Code! ");
        this.Close();
    }

    private void btnOkay_Click(object sender, EventArgs e)
    {
        //string name;
        name = tbxName.Text;
        Form1 ict = new Form1();

        if (name == "")
        {
            MessageBox.Show("Please Enter Your Name!");
            this.DialogResult = System.Windows.Forms.DialogResult.No;

        }
        else
        {
        ict._nameProcessed = name;
        this.Close();
        }

    }
Run Code Online (Sandbox Code Playgroud)

现在我想从第二个表单中取出'name',将它放在第一个表单的_nameprocessed上,然后执行函数的其余部分.我怎样才能做到这一点?任何帮助!

jpi*_*lho 5

使用ShowDialog而不是Show.

inm.ShowDialog();
Run Code Online (Sandbox Code Playgroud)

这将停止Form1代码,直到Form2关闭.表单关闭后,您可以从中读取名称变量.

_nameProcessed = inm.name;
Run Code Online (Sandbox Code Playgroud)

最终的代码是:

private void showdial()
{
  InputName inm = new InputName();
  inm.ShowDialog();
  _nameProcessed = inm.name;

}
Run Code Online (Sandbox Code Playgroud)

编辑第二个问题:按钮有一个名为"DialogResult"的属性.将"确定"按钮设置为"确定",将"取消"按钮设置为"取消".在代码上你只需要一个小的IF和更改函数来返回一个bool:

private bool showdial()
{
  InputName inm = new InputName();
  if (inm.ShowDialog() != System.Windows.Forms.DialogResult.OK)
      return false;
  _nameProcessed = inm.name;

  return true;
}
Run Code Online (Sandbox Code Playgroud)

然后点击按钮

private void btnGetSomething_Click(object sender, EventArgs e)
{
     if(!showdial())
         return;
     //some more functionalities in this function!!!
 }
Run Code Online (Sandbox Code Playgroud)

编辑2 - 添加此行'this.Close()':

this.DialogResult = System.Windows.Forms.DialogResult.OK;
Run Code Online (Sandbox Code Playgroud)

制作最终代码:

private void btnOkay_Click(object sender, EventArgs e)
{
    //string name;
    name = tbxName.Text;
    Form1 ict = new Form1();

    if (name == "")
    {
        MessageBox.Show("Please Enter Your Name!");
    }
    else
    {
    ict._nameProcessed = name;
    this.DialogResult = System.Windows.Forms.DialogResult.OK;
    this.Close();
    }

}
Run Code Online (Sandbox Code Playgroud)