Как скрыть форму Windows Forms в статическом контексте? - PullRequest
1 голос
/ 06 января 2011

У меня есть приложение Windows Forms, которое включает в себя класс формы (и класс конструктора) и статический класс. Я хочу иметь возможность скрыть форму, вызывая метод в классе формы из статического класса.

Метод скрытия следующий:

    internal static void HideController()
    {
        DialogResult dlgResult = 
            MessageBox.Show("Controller will now close.", "Closing...", 
                            MessageBoxButtons.OK, MessageBoxIcon.Warning);

        if (dlgResult == DialogResult.OK)
        {
            this.Hide();
        }
    }

Форма не является статичной, поэтому я продолжаю сталкиваться с проблемой недопустимости этого в статическом контексте. Я хотел бы назвать метод так:

    static UtilScenario()
    {
        _stkProgramId = ConfigurationManager.AppSettings.Get("stkProgramId");

        if (CheckIfLaunched())
        {
            InitAllFields();
        }
        else
        {
            frmUavController.HideController();
        }
    }

Что мне делать?

Ответы [ 2 ]

2 голосов
/ 06 января 2011

Вы можете использовать статическое свойство Form.ActiveForm , чтобы получить ссылку на форму. Вам нужно будет привести это к frmUavController, чтобы вызвать ваш метод HideController (после удаления из него статического модификатора).

internal void HideController()
{
    DialogResult dlgResult = MessageBox.Show("Controller will now close.", "Closing...", 
        MessageBoxButtons.OK, MessageBoxIcon.Warning);

    if (dlgResult == DialogResult.OK)
    {
        this.Hide();
    }
}

static UtilScenario()
{
    _stkProgramId = ConfigurationManager.AppSettings.Get("stkProgramId");

    if (CheckIfLaunched())
    {
        InitAllFields();
    }
    else
    {
        // a safer cast is recommended
        ((frmUavController)Form.ActiveForm).HideController();
    }
}
0 голосов
/ 06 января 2011

Попробуйте следующее. Создать недвижимость,

public static Form frm { get; set; }

static void UtilScenario()
{
    HideController();
}

internal static void HideController()
{
    if (frm == null)
        return;
    DialogResult dlgResult = MessageBox.Show("Controller will now close.", "Closing...",
        MessageBoxButtons.OK, MessageBoxIcon.Warning);

    if (dlgResult == DialogResult.OK)
    {
        frm.Hide();
    }
}

И вы можете назвать это как:

public void button2_Click(object sender, EventArgs e)
{
    Form1.frm = this;
    Form1.HideController();
}
...