Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在函数中隐藏FormOne,显示FormTwo,然后隐藏FormTwo并继续使用FormOne,其中';停止_C#_Show Hide - Fatal编程技术网

C# 在函数中隐藏FormOne,显示FormTwo,然后隐藏FormTwo并继续使用FormOne,其中';停止

C# 在函数中隐藏FormOne,显示FormTwo,然后隐藏FormTwo并继续使用FormOne,其中';停止,c#,show-hide,C#,Show Hide,所以,在我的代码中,我已经完成了隐藏和显示表单,但是当我返回到我的FormOne时,我不知道如何继续它停止的地方。例如: 表格一: private void addButton_Click(object sender, EventArgs e) { ObjTwo objTwo = new ObjTwo(); objTwo.RefToFormOne = this; this.Hide();

所以,在我的代码中,我已经完成了隐藏和显示表单,但是当我返回到我的FormOne时,我不知道如何继续它停止的地方。例如:

表格一:

private void addButton_Click(object sender, EventArgs e)
        { 
            ObjTwo objTwo = new ObjTwo();
            objTwo.RefToFormOne = this;
            this.Hide();
            ObjTwo.Show();

            ***string variable = ObjTwo.variable;           
            anotherFuction();***

        }
表格二:

{
 public Form RefToFormOne { get; set; }  

 private void input_textBox_TextChanged(object sender, EventArgs e)
        {   
       
            string variable = input_textBox.Text;                                       
        }
   private void okButton_Click(object sender, EventArgs e)
        {
            this.Hide();
            RefToFormOne.Show();            
        }
}
所以,我想要的是:当我回到表单一(在我点击表单二中的OK按钮之后),我想在显示表单二(粗体文本)之后继续这个函数。
有人能帮我吗?我一直在努力解决这个问题:(

您可以使用
ShowDialog
而不是
Show,它的作用与Show类似,只是暂停了调用方法

文件:

如果上述操作不起作用

在第一个表单中,您可以创建一个函数,在第二个表单隐藏时接收来自第二个表单的调用


因此,在第一种形式中:

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();           
}

希望这有帮助!

您可以使用与Show类似的
ShowDialog
来代替
Show
,只是它会暂停调用方法

文件:

如果上述操作不起作用

在第一个表单中,您可以创建一个函数,在第二个表单隐藏时接收来自第二个表单的调用


因此,在第一种形式中:

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的表单时才会继续(就像在执行MessageBox.Show时)

小心使用变量和类名。在原始代码中,您使用了
ObjTwo ObjTwo=new ObjTwo;ObjTwo.Show()
,也就是说,您创建了一个实例,但随后忽略了该实例,并尝试在类上调用Show。在.NET的某些上下文中,它甚至可以使用表单。VB至少有这个可怕的“把戏”它自动在应用程序上生成每个表单的实例,并调用它们类的名称——但在c中,变量不能与类型同名,并且c不采取相同的自动创建步骤,因此ObjTwo.Show()不是问题(它将给出“需要对象引用”错误)


在这个例子中,我还大胆地使用了更多描述性的变量名(尽管我没有使用其他函数,因为它很有趣)。在编码时,请使用比“class1”、“obj2”、“variable”、“textboxX”更合适的名称-我们不仅需要在您寻求帮助时理解您的代码,而且在您必须解决问题时,您还需要在6个月内理解代码。尝试阅读代码,这是一个持续的翻译练习,“存储人名的是textbox23还是textbox27?我将打开表单并查看”当您将文本框属性网格中的(名称)行放到表单上并编写
personNameTextbox


“通往智慧的第一步是直呼事物的真名”——中国谚语

完全同意安迪的观点,你的代码应该是这样的:

    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的表单时才会继续(就像在执行MessageBox.Show时)

小心使用变量和类名。在原始代码中,您使用了
ObjTwo ObjTwo=new ObjTwo;ObjTwo.Show()
,也就是说,您创建了一个实例,但随后忽略了该实例,并尝试在类上调用Show。在.NET的某些上下文中,它甚至可以使用表单。VB至少有这个可怕的“把戏”它自动在应用程序上生成每个表单的实例,并调用它们类的名称——但在c中,变量不能与类型同名,并且c不采取相同的自动创建步骤,因此ObjTwo.Show()不是问题(它将给出“需要对象引用”错误)


在这个例子中,我还大胆地使用了更多描述性的变量名(尽管我没有使用其他函数,因为它很有趣)。在编码时,请使用比“class1”、“obj2”、“variable”、“textboxX”更合适的名称-我们不仅需要在您寻求帮助时理解您的代码,而且在您必须解决问题时,您还需要在6个月内理解代码。尝试阅读代码,这是一个持续的翻译练习,“存储人名的是textbox23还是textbox27?我将打开表单并查看”当您将文本框属性网格中的(名称)行放到表单上并编写
personNameTextbox


“通往智慧的第一步是将事物称为它们的专有名称”-中国谚语

为什么不将Form2显示为模态?显示/隐藏这样的表单不是典型的UI体验。为什么不将Form2显示为模态?显示/隐藏这样的表单不是典型的UI体验。非常感谢。我刚刚开始学习。谢谢你的指数运算。是的,我知道na明:这样使用名称是不正确的。在我的项目中,我对函数、对象等使用了其他名称。但是,再次感谢。非常感谢。我刚刚开始学习这个。谢谢你的指数运算。是的,我知道这样使用名称是不正确的。在我的项目中,我使用了其他名称