如何解决将FormOne隐藏在函数中,显示FormTwo,然后隐藏FormTwo并从停止的FormOne继续
因此,在我的代码中,我已经完成了“隐藏并显示表单”,但是当我回到FormOne时,我不知道如何在停止处继续。例如:
在FormOne中:
[
{
"Classification": "hadoop-env","Properties": {},"Configurations": [
{
"Classification": "export","Properties": {
"HADOOP_HEAPSIZE": "2048"
},"Configurations": []
}
]
}
]
形式二:
private void addButton_Click(object sender,EventArgs e)
{
ObjTwo objTwo = new ObjTwo();
objTwo.RefToFormOne = this;
this.Hide();
ObjTwo.Show();
***string variable = ObjTwo.variable;
anotherFuction();***
}
所以,我想要的是:回到Form One(在FormTwo中单击“确定”按钮后),我想在显示FormTwo(粗体)之后继续该功能。 谁能帮我?我想长时间解决这个问题:(
解决方法
您可以使用Show
来代替ShowDialog
,其作用与show相同,只是它会暂停调用方法。
文档:https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.form.showdialog?view=netcore-3.1
如果以上操作无效
您可以在第一种形式中创建一个函数,以在隐藏第二种形式时接收来自第二种形式的呼叫。
第一种形式:
private void addButton_Click(object sender,EventArgs e)
{
ObjTwo objTwo = new ObjTwo();
objTwo.RefToFormOne = this;
this.Hide();
ObjTwo.Show();
//PUT EVERYTHING IN THE FUNCTION BELOW
}
public void ShowFormAndDoYourStuff()
{
//Do your stuff
}
第二种形式:
//Instead of this:
//public Form RefToFormOne { get; set; }
//Do this below:
public Form1 RefToFormOne { get; set; }
private void okButton_Click(object sender,EventArgs e)
{
this.Hide();
RefToFormOne.Show();
RefToFormOne.ShowFormAndDoYourStuff();
}
希望这对您有所帮助!
,完全同意Andy,您的代码应如下所示:
private void addButton_Click(object sender,EventArgs e)
{
var addPerson = new AddPersonDialog();
addPerson.ShowDialog();
string personName = addPerson.PersonName;
anotherFuction();
}
第二种形式
class AddPersonDialog{
public string PersonName { get; set; }
private void input_textBox_TextChanged(object sender,EventArgs e)
{
PersonName = input_textBox.Text;
}
private void okButton_Click(object sender,EventArgs e)
{
this.Close();
}
}
这是一种标准的ui方式,即在前一个表单的前面出现一个表单,以防止在关闭前一个表单之前使用前一个表单。就像您曾经使用过的每个保存对话框一样。
ShowDialog从概念上停在它的调用位置,并且仅在关闭ShowDialog'd的表单时才继续(例如在执行MessageBox.Show时)
使用变量和类名时要小心。在原始代码中,您使用了ObjTwo objTwo = new ObjTwo; ObjTwo.Show()
,即您创建了一个实例,但随后忽略了该实例,而是尝试在该类上调用Show。在.NET的某些上下文中,它甚至可以与表单一起使用-VB至少具有这种可怕的“技巧”,它会在应用程序上自动创建每种表单的实例并调用它们的类名-但在c#中变量不能与类型具有相同的名称,并且C#不能采用相同的自动创建步骤,因此ObjTwo.Show()不是问题(它将给出“需要对象引用”错误)
在此示例中,我也自由使用了更具描述性的变量名(尽管我将anotherFuction留在了一起,因为它很有趣)。在编码时,请使用比“ class1”,“ obj2”,“ variable”,“ textboxX”更多的apt名称-当您寻求帮助时,我们不仅必须理解您的代码,而且还必须在6中理解它几个月的时间,您必须解决它的问题。尝试读取连续的翻译代码是“是存储个人名称的textbox23还是textbox27?我将打开表单并看一下”,这非常令人厌烦,当需要花费两秒钟的时间单击时,完全没有必要。将文本框属性网格的(名称)行放到表单上并写上personNameTextbox
“智慧的第一步是将事物称为专有名词”-中国谚语
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。