C #: простой вопрос, касающийся радио и флажков. Получаете неправильный тип возврата? - PullRequest
0 голосов
/ 04 июля 2011

Получение ошибки:

Error   1   'string RadioGroupTester.Form1.chkReceipt_CheckedChanged(object, System.EventArgs)' has the wrong return type

Когда я скомпилирую очень простую программу для понимания радио и элементов управления флажками.

Вот код для формы:

    private string rdoMastercard_CheckedChanged(object sender, EventArgs e)
    {
        if (rdoMastercard.Checked)
            return "You have selected Mastercard";
        else
            return "You have selected Visa";
    }

    private string chkReceipt_CheckedChanged(object sender, EventArgs e)
    {
        if (chkReceipt.Checked)
            return "You will receive a receipt";
        else
            return "You will not receive a receipt";
    }

    private string chkRecurring_CheckedChanged(object sender, EventArgs e)
    {
        if (chkRecurring.Checked)
        {
            return "You will be charged monthly";
        }
        else
            return "This is a one time payment";
    }

А вот как выглядит форма:

enter image description here

Что я здесь не так делаю?Я извиняюсь, но я все еще довольно новичок в C # и VS 2010.

Спасибо, Рэй

Ответы [ 2 ]

7 голосов
/ 04 июля 2011

Вы не можете вернуть вещи из обработчика событий.Вы хотите вместо этого показать окно сообщения?Или дать отзыв через ярлык?Это будет что-то вроде:

private <s>string</s> <b>void</b> rdoMastercard_CheckedChanged(object sender, EventArgs e)
{
    if (rdoMastercard.Checked)
        <s>return </s><b>MessageBox.Show(</b>"You have selected Mastercard"<b>)</b>;
    else
        <s>return </s><b>MessageBox.Show(</b>"You have selected Visa"<b>)</b>;
}

и то же самое для других ваших примеров.В этом примере используется окно сообщения, но вы можете установить текст метки или что-то еще.

Причина?Как вы ожидаете, что C # будет знать, что вы хотите делать, когда возвращаете что-то из обработчика событий?Обработчик события обрабатывает события, не более

2 голосов
/ 04 июля 2011

Не уверен, как вы попали в этот рассол, вы, похоже, предполагаете, что возвращение строки из обработчика событий CheckedChanged полезно.В проекте не предусматривалось такое использование, объявление для обработчика события RadioButton.CheckedChanged:

public event EventHandler CheckedChanged;

, что делает объявление типа делегата EventHandler соответствующим:

public delegate void EventHandler(object sender, EventArgs e);

Который точно определяет как должен выглядеть ваш обработчик событий.Он имеет в качестве метода, который возвращает void и принимает два аргумента: один тип object и один тип EventArgs .Вот что вы получите, если дважды щелкнуть переключатель в конструкторе:

    private void radioButton1_CheckedChanged(object sender, EventArgs e) {

    }

Обратите внимание, как автоматически сгенерированный метод точно соответствует сигнатуре типа делегата.Компилятор счастлив. не понравится *1020*, если вы измените подпись своего обработчика событий.Код Winforms был предварительно запрограммирован для вызова вашего обработчика событий CheckedChanged, и он надеется, что вы реализовали способ, которым он был предварительно запрограммирован.Чего он не может сделать, так это иметь дело с другим типом возврата.Он не знает, что с этим делать.Что это , что оно должно с этим делать?Вы хотите войти?Хотите изменить свойство Text переключателя?Вы хотите отправить его через Интернет на другую машину?

Это, безусловно, возможно.Но вы должны написать этот код, Winforms не могут угадать для вас, для чего вы хотите его использовать.

Доллар на этом заканчивается, ваше время взять на себя ответственность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...