не может неявно преобразовать тип void в int c# - PullRequest
0 голосов
/ 11 марта 2020

Здравствуйте. Итак, я делаю текстовый редактор и имею две функции, которые я вызываю при нажатии на разные кнопки в моем GUI. Поэтому я вызываю свою функцию «NewTextbutton» в функции «CloseToolStripMenuItem». То, что я хочу, - это если пользователь нажимает на кнопку «Отмена», моя программа не должна закрываться. Я могу получить возвращаемое значение из функции, а затем с помощью проверки состояния, если пользователь нажал «Отмена» или нет. Но я получаю ошибку, что не могу преобразовать Void в int. Может кто-нибудь, пожалуйста, помогите. Спасибо.

private int NewTextbutton_Click(object sender, EventArgs e)
{
    if (TextBox.TextLength==0)
    {
        TextBox.Clear();
        return 0;
    }
    else
    {

        if (this.Text.Contains("*"))
        {
            var result = MessageBox.Show("Do you want to save changes to the document?",
                 "Texteditor",
                 MessageBoxButtons.YesNoCancel,
                 MessageBoxIcon.Question);


            if (result == DialogResult.Yes)
            {
                SaveTextbutton.PerformClick();
                TextBox.Clear(); 
                this.Text = $"Texteditor                                                 dok1.txt";
                P = "";
                return 0;
            }
            else if (result == DialogResult.Cancel)
            {
                return 1;
            }
            else
            {
                TextBox.Clear();
                return 0;
            }
        }

        TextBox.Clear();
        this.Text = $"Texteditor                                                 dok1.txt";
        P = "";
        return 0;
    }
}

private void closeToolStripMenuItem_Click(object sender, EventArgs e)
{
    int a = NewTextbutton.PerformClick(); //here is the error "cannot convert void to int"
    if (a == 1)
    {
        MessageBox.Show("operation Canceled");
    }
    else
    {
        Application.Exit();
    }

}

1 Ответ

3 голосов
/ 11 марта 2020

Действительно, обработчик событий обычно возвращает void, а не int, поэтому вы не можете использовать PerformClick для получения возвращаемого значения.

Вы можете выполнить рефакторинг следующим образом, например:

private int CheckWhatToDo() 
{
    // all the code that was in NewTextbutton_Click(object sender, EventArgs e)
}

private void NewTextbutton_Click(object sender, EventArgs e) {
    CheckWhatToDo();
}

private void closeToolStripMenuItem_Click(object sender, EventArgs e)
{
    int a = CheckWhatToDo(); 

    if (a == 1)
    {
        MessageBox.Show("operation Canceled");
    }
    else
    {
        Application.Exit();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...