【问题标题】:How to check if form is called from another form C# [closed]如何检查表单是否从另一个表单 C# [关闭]
【发布时间】:2018-09-25 16:11:06
【问题描述】:

我有Form1,在这种形式下,我有这个代码

Form2 frm = new Form2();
frm.ShowDialog();

现在我的问题是:如何知道form2 是否被这样调用
form2中的按钮事件中?
form2 中的按钮事件中,我想检查ShowDialog() 是否被称为FROM FORM1(不是来自另一个表格),如果单击按钮,form2 是关门了!

【问题讨论】:

  • form2的构造函数中只添加一个参数或在form2中设置一个属性(或方法)
  • 你能输入示例代码吗?我不知道怎么按你说的做
  • 看我的回答。
  • 虽然问题质量很差,但我想我设法提供了一个正确的解决方案。看我的回答。

标签: c#


【解决方案1】:

您可以使用Form.Owner Property

Form1:

Form2 frm = new Form2();
frm.ShowDialog(this); // owner parameter

Form2:

if (this.Owner != null)
{ 
    // Owner is not null, there is a calling form
    // Do something
    if (this.Owner is Form1)
    {
       Form1 form1 = (Form1)this.Owner; // Form1 called this form!
    }
}

【讨论】:

  • 记住它不应该在表单的构造函数中被检查,因为它还没有被分配,参考stackoverflow.com/a/38469261/2265446
  • 在 OP 的情况下,他想在他的按钮点击事件中使用它。
【解决方案2】:

请尽量使您的要求更准确。

public partial class Form2: Form
{   
    public static bool wasCalledFromForm1 = false;
    public Form2 (bool form1Called = false)
    {
        InitializeComponent();
        wasCalledFromForm1 = form1Called;
    }
    private void Button1_Click(object sender, System.EventArgs e)
    {
        if (wasCalledFromForm1) this.Close;
    }
}

按钮 1 打开 Form2:

Form2 form2 = new Form2(true);
form2.ShowDialog();

【讨论】:

    【解决方案3】:

    据我了解,您想知道是否有办法检查 showDialog 是否已成功调用,为此您可以使用以下代码 sn-p:-

    Form2 frm = new Form2();
    var result = frm.ShowDialog();
    if (result == DialogResult.OK)
    {
        // apply your logic
    }
    

    PS:- 以后请正确、仔细地撰写您的问题,以便我们更容易回答:) :) :)

    【讨论】:

    • 这不是一个正确的答案 - OP 必须编写代码来确保表单返回该值。 ShowDialog 可以返回几个不同的值并且仍然被成功调用 - 例如,如果通过单击左上角的关闭按钮关闭表单(许多人会这样做),则默认返回值是 DialogResult.Cancel 而不是 DialogResult.OK。跨度>
    • 感谢@PaulF 指出这一点,由于问题不清楚,我没有详细说明并检查所有条件,我期待提问者的一些评论,无论如何我修改问题后将撤回或修改答案,以便正确理解:)
    【解决方案4】:

    一个带有构造函数的例子。

    form2 frm2 = new Form2(calledByFrm1: true);
    frm2.ShowDialog();
    
    // ...
    
    class Form2 ... 
    {
        boolean calledByForm1;
    
        public Form2(boolean calledByForm1) 
        {
            this.calledByForm1 = calledByForm1;
        }
    
    
        public Form2_Onload .... 
        {
            if (this.calledByForm1) 
            {
                // your logic here
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-27
      • 1970-01-01
      • 2012-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-27
      相关资源
      最近更新 更多