Как я могу найти, какая форма открыла форму, открытую в данный момент? (C #, WinForms) - PullRequest
0 голосов
/ 07 ноября 2018

Итак, у меня в основном есть форма, которая открывается, и мне нужно проверить, какая форма называется той, чтобы открыть

«Родительская форма»

    private void btnEnter_Click(object sender, EventArgs e)
    {
        this.Close();
        newForm nf = new newForm();
        nf.Show()
    }

«Открытая форма»

    private void newForm_Load(object sender, EventArgs e)
    {
        if parent is ("oldForm") // Need to know how to code for this line.
        {
           //do some stuff here 
        }

        else
        {
           //Do something different
        }
    }

Так, например, если бы oldForm была формой, которая вызвала эту, то произошло бы что-то конкретное, чего не произошло бы, если бы "anotherForm" вызвал ее, например,

1 Ответ

0 голосов
/ 07 ноября 2018

Вы можете просто добавить свойство 'Parent' в свои формы и установить его перед вызовом Show.

private void btnEnter_Click(object sender, EventArgs e)
{
    this.Close();
    newForm nf = new newForm();
    nf.Parent = this;
    nf.Show()
}

Ваша форма будет выглядеть так:

public class MyForm
{
    public Form Parent {get;set;} 

    private void newForm_Load(object sender, EventArgs e)
    {
        if (this.Parent is oldForm) 
        {
           //do some stuff here 
        }
        else
        {
           //Do something different
        }
    }
}

Обратите внимание, что if (this.Parent is oldForm) эквивалентно if (this.Parent.GetType() == typeof(oldForm))

Как сказано в одном из комментариев, если вы используете только свойство Parent для принятия этого единственного решения, вам лучше определить его как логическое свойство, называемое DoSomething, которое указывает, что оно делает. Объединение этого с другим предложением дает:

public class MyForm
{
    private bool specialMode;

    public MyForm(bool mode)
    { 
        this.specialMode = mode;
    }

    private void newForm_Load(object sender, EventArgs e)
    {
        if (this.specialMode) 
        {
           //do some stuff here 
        }
        else
        {
           //Do something different
        }
    }
}

который вы бы назвали так:

private void btnEnter_Click(object sender, EventArgs e)
{
    this.Close();
    newForm nf = new newForm(true); // SpecialMode = ON
    nf.Show()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...