Как изменить аргумент значения из обработчика событий? - PullRequest
1 голос
/ 28 октября 2011

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

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

Делать это:

class myCheckBox : CheckBox
{
    bool b1;
    public myCheckBox(ref bool b)
    {
        b1 = b;
        this.CheckedChanged += new EventHandler(myCheckBox_CheckedChanged);
    }

    void myCheckBox_CheckedChanged(object sender, EventArgs e)
    {
        b1 = Checked;
    }
}

не помогает, поскольку b1 является только копией b.

Есть ли способ сделать: ref b1 = ref b;?если нет, то как мне решить эту проблему?

(Примеры служат только для объяснения вопроса.)

Ответы [ 4 ]

4 голосов
/ 28 октября 2011

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

public class MyEventArgs : EventArgs
{
    public bool Value { get; set; }
}

public class MyClass
{
    public void method1(ref bool b)
    {
        MyEventArgs e = new MyEventArgs()
        {
            Value = b
        };
        eventMethod(e);

        b = e.Value;
    }

    void eventMethod(MyEventArgs e)
    {
        e.Value = false;
    }
}

Вы также можете взглянуть на стандартный шаблон обработчика событий, установленный в .NET: Как: публиковать события, соответствующие рекомендациям .NET Framework (Руководство по программированию в C #)

1 голос
/ 31 октября 2011

Передайте класс, содержащий поле, строку, обозначающую его, и сохраните их вместо b1. Тогда используйте отражение.

См. Как создать ссылку на поле значения

0 голосов
/ 28 октября 2011

Хорошо, когда I скопировал код в консольное приложение (пришлось, конечно, сменить его на статические функции и var b1), он работает как вы хотите, при вызове из Main:

bool b = true;
method1(ref b);
Console.writeLine(b1);

печатает 'ложь' ....

0 голосов
/ 28 октября 2011

Сделайте b1 публичным полем вашего класса.

Или приватным, со свойством с публичным получателем и публичным установщиком.

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