как вызвать событие из формы с помощью элемента управления (например, кнопки)? - PullRequest
2 голосов
/ 25 декабря 2011

Возможно ли это? Мне нужно позвонить Form1_FormClosing здесь:

ContextMenu trayMenu = new ContextMenu();
trayMenu.MenuItems.Add("Close", delegate {
    Form1_FormClosing(????)
});

Мне это нужно, потому что я использую событие CancelEventArgs из _FormClosing:

private void Form1_FormClosing(object sender, CancelEventArgs e)
{
    if (th != null && th.ThreadState == System.Threading.ThreadState.Running)
    {
        if (MessageBox.Show("the process is running, you want stop it?", "app", MessageBoxButtons.OKCancel) == DialogResult.OK)
        {
            AbortProccess();                     }
        else
        {
            e.Cancel = true;
        }
    }
}

Надеюсь, это понятно, заранее спасибо.

Ответы [ 3 ]

4 голосов
/ 25 декабря 2011

Есть несколько вещей, которые вы могли бы сделать.Во-первых, вы можете просто закрыть форму, используя myForm.Close(), так как это косвенно вызовет событие FormClosing.Кроме того, вы можете переместить все в событии FormClosing в отдельный метод, а не в само событие.Затем вы можете вызвать этот метод из события и из вашего MenuItem.Если вы не хотите делать ни то, ни другое, попробуйте использовать это в качестве делегата:

//CancelEventArgs can also take a boolean which dictates if 
//it should be cancelled
Form1_FormClosing(this, new CancelEventArgs()); 
3 голосов
/ 25 декабря 2011

Это технически возможно, просто вызовите метод OnFormClosing ().Но это на самом деле не закрывает форму, оно должно запускаться только тогда, когда форма действительно закрывается.Притворство о том, что форма закрывается, когда она на самом деле не закрывается, приведет к разочарованию.

Поэтому просто вызовите метод Close ().

3 голосов
/ 25 декабря 2011
ContextMenu trayMenu = new ContextMenu();
trayMenu.MenuItems.Add("Close", delegate {
     this.Close();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...