我有2个窗体。第一个在程序启动期间处于活动状态的按钮有一个按钮,其中显示另一个第二个窗体,其中有一个文本字段,用户在其中键入其名称并且HIT正常。
现在在第一种形式中,我有一个变量名:nameproccessed,它取自第二种形式的名称。但问题是我的按钮在第一种形式除了取名之外还有更多的功能,如何阻止编译器的流程从第二种形式取名第一,然后处理函数的其余执行??? / p>
以下是我的代码片段:
//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();
}
}
现在我想从第二个表单中取出'name',将它放在第一个表单的_nameprocessed上,然后执行函数的其余部分。我怎样才能做到这一点?任何帮助!
答案 0 :(得分:5)
使用ShowDialog而不是Show。
inm.ShowDialog();
将停止Form1代码,直到Form2关闭。 表单关闭后,您可以从中读取名称变量。
_nameProcessed = inm.name;
最终的代码是:
private void showdial()
{
InputName inm = new InputName();
inm.ShowDialog();
_nameProcessed = inm.name;
}
编辑第二个问题: 按钮有一个名为“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;
}
然后点击按钮
private void btnGetSomething_Click(object sender, EventArgs e)
{
if(!showdial())
return;
//some more functionalities in this function!!!
}
编辑2 - 添加此行'this.Close()':
this.DialogResult = System.Windows.Forms.DialogResult.OK;
制作最终代码:
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();
}
}
答案 1 :(得分:0)
以第二种形式保存公共字段中的输入。隐藏第二个表单后显示您仍然可以访问公共变量。所以得到价值并处理第二种形式。
编辑: 在表单中停止代码执行。使用
secondForm.ShowDialog();
按照Jorge的建议