Группировка двух методов вместе в C # - PullRequest
1 голос
/ 09 июня 2011

В настоящее время у меня есть два разных обработчика событий в C #, которые выполняют две разные функции.Хотя, как я могу объединить два метода вместе, чтобы только одна кнопка могла выполнять оба действия?(Учитывая, что событие button1_Click должно быть выполнено в первую очередь.)

    private void button2_Click(object sender, EventArgs e)
    {
        var file = File.AppendText(@"c:\output2.txt");

        foreach (string tmpLine in File.ReadAllLines(@"c:\output.txt"))
        {
            if (File.Exists(tmpLine))
            {
                file.WriteLine(tmpLine);
            }
        }

        file.Close();

    }

    private void button1_Click(object sender, EventArgs e)
    {
        using (StreamWriter sw = File.AppendText(@"c:\output.txt"))
        {
            StreamReader sr = new StreamReader(@"c:\filename.txt");

            string myString = "";
            while (!sr.EndOfStream)
            {

                myString = sr.ReadLine();
                int index = myString.LastIndexOf(":");
                if (index > 0)
                    myString = myString.Substring(0, index);

                sw.WriteLine(myString);
            }
            button2_Click(sender, e);

        }

    }

Ответы [ 5 ]

11 голосов
/ 09 июня 2011

Вместо того, чтобы писать код в обработчике событий, выведите их в две функции и затем вызывайте эти функции любым способом из обработчика событий.

2 голосов
/ 09 июня 2011

Я стараюсь не допускать большей части логики в обработчики событий и создаю функции с логическими именами, которые я вызываю из обработчиков событий. Тогда их можно вызывать откуда угодно.

2 голосов
/ 09 июня 2011

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

private void button1_Click(object sender, EventArgs e)
{
    // All the code that's currently there
    button2_Click(sender, e);
}

Или вы можете извлечь код из обработчиков событий в отдельные методы:

private void button1_Click(object sender, EventArgs e)
{
    WriteToOutputDotTxt();
    OtherMethodThatWritesToOutputDotTxt();
}
private void button2_Click(object sender, EventArgs e)
{
    OtherMethodThatWritesToOutputDotTxt();
}

private void WriteToOutputDotTxt()
{
    // Code that's currently in button1_Click
}

private void OtherMethodThatWritesToOutputDotTxt()
{
    // Code that's currently in button2_Click
}

Код не' должны содержать в обработчиках событий, на самом деле вам будет проще (если вам интересно!) протестировать ваш код, если вы сможете отделить его от своего пользовательского интерфейса.Например, вы можете иметь класс с именем ProcessOutputFile и переместить методы WriteToOutputDotTxt и OtherMethodThatWritesToOutputDotTxt в этот класс.Тогда гораздо проще писать тесты для этого кода, поскольку он не «привязан» к коду пользовательского интерфейса.

1 голос
/ 09 июня 2011

Просто прикрепите два обработчика событий к некоторой кнопке:

somebutton.Click += new EventHandler(button1_Click);
somebutton.Click += new EventHandler(button2_Click);
0 голосов
/ 09 июня 2011
// given these two methods extracted from your events
void DoBar(object sender, EventArgs e)
{

    var file = File.AppendText(@"c:\output.txt");

    foreach (string tmpLine in File.ReadAllLines(@"c:\filename.txt"))
    {
        if (File.Exists(tmpLine))
        {
            file.WriteLine(tmpLine);
        }
    }

    file.Close();

}

void DoFoo(object sender, EventArgs e)
{
        using (StreamWriter sw = File.AppendText(@"c:\output.txt"))
        {
            StreamReader sr = new StreamReader(@"c:\filename.txt");

            string myString = "";
            while (!sr.EndOfStream)
            {

                myString = sr.ReadLine();
                int index = myString.LastIndexOf(":");
                if (index > 0)
                    myString = myString.Substring(0, index);

                sw.WriteLine(myString);
            }
        }

}

    // you can subscribe like this
button1.Click += DoFoo;
button1.Click += DoBar;
button2.Click += DoBar;  

EDIT забыл моего отправителя и eventargs

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