C # Использование переменных в множественных функциях для приложения Windows формы - PullRequest
0 голосов
/ 25 апреля 2018

Я хотел бы использовать переменную в нескольких функциях в Visual Studio. Я пытаюсь получить value_1 , который будет использоваться в качестве метки для private void button1_Click .

Если я попробую это так, я получу следующее сообщение об ошибке:

'Black1_CheckedChanged' соответствует делегату 'EventHandler'

Что мне не хватает? Буду очень признателен за помощь. Спасибо.

public partial class Form1 : Form
{
    int value_1 = 20;
    int value_2 = 20;
    int value_3 = 20;

    public Form1()
    {
        InitializeComponent();
    }

    // Groupe Colour 1
    private void Black1_CheckedChanged(object sender, EventArgs e, int value_1)
    {

        colour1.BackColor = System.Drawing.Color.Black;
        groupBox1.BackColor = System.Drawing.Color.Black;

        value_1 = 0;
    }

    private void Brown1_CheckedChanged(object sender, EventArgs e)
    {
        colour1.BackColor = System.Drawing.Color.Brown;
        groupBox1.BackColor = System.Drawing.Color.Brown;

        value_1 = 1;
    }

    private void Red1_CheckedChanged(object sender, EventArgs e)
    {
        colour1.BackColor = System.Drawing.Color.Red;
        groupBox1.BackColor = System.Drawing.Color.Red;

        value_1 = 2;
    }

    private void Orange1_CheckedChanged(object sender, EventArgs e)
    {
        colour1.BackColor = System.Drawing.Color.Orange;
        groupBox1.BackColor = System.Drawing.Color.Orange;

        value_1 = 3;
    }

    private void Yellow1_CheckedChanged(object sender, EventArgs e)
    {
        colour1.BackColor = System.Drawing.Color.Yellow;
        groupBox1.BackColor = System.Drawing.Color.Yellow;

        value_1 = 4;
    }

    private void Green1_CheckedChanged(object sender, EventArgs e)
    {
        colour1.BackColor = System.Drawing.Color.Green;
        groupBox1.BackColor = System.Drawing.Color.Green;

        value_1 = 5;
    }

    private void Blue1_CheckedChanged(object sender, EventArgs e)
    {
        colour1.BackColor = System.Drawing.Color.Blue;
        groupBox1.BackColor = System.Drawing.Color.Blue;

        value_1 = 6;
    }

    private void Purple1_CheckedChanged(object sender, EventArgs e)
    {
        colour1.BackColor = System.Drawing.Color.Purple;
        groupBox1.BackColor = System.Drawing.Color.Purple;

        value_1 = 7;
    }

    private void Grey1_CheckedChanged(object sender, EventArgs e)
    {
        colour1.BackColor = System.Drawing.Color.Gray;
        groupBox1.BackColor = System.Drawing.Color.Gray;

        value_1 = 8;
    }

    private void White1_CheckedChanged(object sender, EventArgs e)
    {
        colour1.BackColor = System.Drawing.Color.White;
        groupBox1.BackColor = System.Drawing.Color.White;

        value_1 = 9;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        value_1 = int.Parse(label_total.Text);
    }
}

1 Ответ

0 голосов
/ 25 апреля 2018

Black1.CheckedChanged ожидает метод конкретной подписи (с аргументами object и EventArgs).Количество параметров для функции Black1_CheckedChanged было изменено.При большем количестве параметров, чем два параметра, вызов функции не найдет значение для третьего параметра int value_1, и эта ошибка возникает.Вот почему выдается ошибка.

Чтобы решить эту проблему, вы должны изменить эту часть своего кода:

private void Black1_CheckedChanged(object sender, EventArgs e, int value_1)
{
    colour1.BackColor = System.Drawing.Color.Black;
    groupBox1.BackColor = System.Drawing.Color.Black;

    value_1 = 0;
}

На это:

private void Black1_CheckedChanged(object sender, EventArgs e)
{
    colour1.BackColor = System.Drawing.Color.Black;
    groupBox1.BackColor = System.Drawing.Color.Black;

    value_1 = 0;
}

Или, как вы можете видеть в этом ответе , вы можете использовать лямбда-выражение в качестве адаптера для вашего обработчика событий и использовать текущую функцию без изменений:

Black_1.CheckedChanged += new CheckedChanged((sender, e) => Black1_CheckedChanged(sender, e, value_1));

С предыдущимРешение, ваш код будет выглядеть следующим образом:

public partial class Form1 : Form
{
    int value_1 = 20;
    int value_2 = 20;
    int value_3 = 20;

    public Form1()
    {
        InitializeComponent();
        Black_1.CheckedChanged += new CheckedChanged((sender, e) => Black1_CheckedChanged(sender, e, value_1));
    }

    ...

    private void Black1_CheckedChanged(object sender, EventArgs e, int value_1)
    {
        colour1.BackColor = System.Drawing.Color.Black;
        groupBox1.BackColor = System.Drawing.Color.Black;

        value_1 = 0;
    }
}

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

Например:

public partial class Form1 : Form
{
    int value_1 = 20;
    int value_2 = 20;
    int value_3 = 20;
    int temp = 0;

    public Form1()
    {
        InitializeComponent();
    }

    ...

    private void Black1_CheckedChanged(object sender, EventArgs e)
    {
        colour1.BackColor = System.Drawing.Color.Black;
        groupBox1.BackColor = System.Drawing.Color.Black;

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