Проблема с событиями c # - PullRequest
       1

Проблема с событиями c #

1 голос
/ 23 августа 2010

Мне нужно реализовать события Pause и Resume MP3-плеера внутри одного и того же события нажатия кнопки.Ниже приведен код, который я пробовал, и он не работает, Может ли кто-нибудь дать мне решение

private void button3_Click(object sender, EventArgs e)
{
    if (button3.Text == "Pause")
    {
        CommandString = "pause mp3file";
        mciSendString(CommandString, null, 0, 0);
        Status = true;
        button3.Text = "Resume";           
    }
    if (button3.Text == "Resume")
    {   
        CommandString = "resume mp3file";
        mciSendString(CommandString, null, 0, 0);
    }
}

Ответы [ 4 ]

5 голосов
/ 23 августа 2010

Вы изменяете свойство button3.Text в первом операторе if. Когда проверяется второй оператор if, он имеет значение true (оба оператора выполняются при каждом нажатии кнопки, когда свойство Text имеет значение «Пауза»)

Используйте if, иначе для запуска того или иного блока кода.

Используйте операторы if, else if, если вы хотите, чтобы тест выполнялся также во втором блоке кода.

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

if (button3.Text == "Pause")
{
    CommandString = "pause mp3file";
    mciSendString(CommandString, null, 0, 0);
    Status = true;
    button3.Text = "Resume";
}
else if(button3.Text == "Resume")
{   
    CommandString = "resume mp3file";
    mciSendString(CommandString, null, 0, 0);
    button3.Text = "Pause";
}
4 голосов
/ 23 августа 2010

на первый взгляд это не будет работать должным образом, потому что в 2 случаях

if (button3.Text == "Resume")
{   
    CommandString = "resume mp3file";
    mciSendString(CommandString, null, 0, 0);
}

вы пропустили строку:

button3.Text = "Pause";

На самом деле, не стоит проверять кнопкусостояние по свойству текста.В качестве простого решения вам нужно иметь логический флаг для проверки на него.

1 голос
/ 23 августа 2010

у вас есть два последовательных оператора if. Вам нужен только один оператор if / else.

измените свой код на:

    if (button3.Text == "Pause")
    {
        CommandString = "pause mp3file";
        mciSendString(CommandString, null, 0, 0);
        Status = true;
        button3.Text = "Resume";           
    }
    else if (button3.Text == "Resume")
    {   
        CommandString = "resume mp3file";
        mciSendString(CommandString, null, 0, 0);
    }
0 голосов
/ 23 августа 2010

Проблема:

К тому времени, когда вы доберетесь до второго оператора if, вы изменили текст кнопки, следовательно, оба оператора выполняются ...

Вот быстрый тест:

        if (button1.Text == "Pause")
        {
            label1.Text = label1.Text + " saw pause ";
            button1.Text = "Resume";


        }
        if (button1.Text == "Resume")
        {
            label1.Text = label1.Text + " saw resume ";
            button1.Text = "Pause";
        }

возвращает: label1 возобновление паузы пилы.

Есть два способа исправить это:

Вы можете вставить 'return;' оператор внутри каждого оператора if:

private void button3_Click(object sender, EventArgs e)
{

    if (button3.Text == "Pause")
    {
        CommandString = "pause mp3file";
        mciSendString(CommandString, null, 0, 0);
        Status = true;
        button3.Text = "Resume";
        return;
    }
    if (button3.Text == "Resume")
    {   
        CommandString = "resume mp3file";
        mciSendString(CommandString, null, 0, 0);
        button3.Text = "Pause";
        return;
    }
}

Или, во-вторых, вы можете зафиксировать значение текста кнопки один раз:

private void button3_Click(object sender, EventArgs e)
{
    String value = button3.Text;
    if (value == "Pause")
    {
        CommandString = "pause mp3file";
        mciSendString(CommandString, null, 0, 0);
        Status = true;
        button3.Text = "Resume";

    }
    if (value == "Resume")
    {   
        CommandString = "resume mp3file";
        mciSendString(CommandString, null, 0, 0);
        buton3.Text = "Pause"; // As mentioned before, this is required too.
    }
}

Надеюсь, это поможет.

Steve

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