2010-01-05 5 views
1

У меня есть простая кнопка, которая при нажатии должна изменить текст из Справки в Скрыть и размер формы окна. Проблема, с которой я сталкиваюсь, не может найти инструкцию if. Он не может увидеть кнопку button3.text Help или скрыть. Любые советы или предложения?Текст кнопки C# и изменение размера

private void button2_Click(object sender, EventArgs e) 
{ 
     string helpstring = "Help"; 
     string hidestring = "Hide"; 
     if (button3.Text == helpstring) 
     { 
      button3.Text = hidestring; 
      Size = new System.Drawing.Size(1106, 563); 
     } 
     if (button3.Text == "Hide") 
     { 
      Size = new System.Drawing.Size(586, 563); 
      button3.Text = helpstring; 
     } 
    } 
+1

Просто наблюдая, вы пытаетесь изменить кнопку, которую вы назвали button3, а метод обработчика называется button2_Click. Вы не случайно написали обработчик неправильной кнопки? – Charlie

ответ

3

Похоже, что у вас неправильные кнопки.

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

Ваша проблема может быть, что кнопка будет начинать с Text, который не является ни Help, ни Hide. Поэтому ни заявление if ничего не сделает.

Вы должны установить контрольную точку в функции (щелкните панель слева рядом с одной из строк кода), затем переместите указатель мыши на button3.Text и посмотрите, на что он фактически равен.

Однако, если текст кнопки Help, ничего не произойдет. Как указал manitra, у вас нет предложения else.

Таким образом, ваш код увидите, что текст кнопки Help и ее изменение Hide.
Однако следующий оператор if увидит, что текст кнопки теперь Hide, и он изменит его на Help.

+1

Да, ваше право, DUHH !! – 2010-01-05 15:08:14

1

Почему вы не устанавливаете точку останова в начале метода и не видите, для чего это значение для button3.Text?

Я предполагаю, что ваше мероприятие не подключено должным образом, и код даже не вызывается.

5

Вы забыли «еще». Это должно работать:

private void button2_Click(object sender, EventArgs e) 
{ 
    string helpstring = "Help"; 
    string hidestring = "Hide"; 
    if (button3.Text == helpstring) 
    { 
     button3.Text = hidestring; 
     Size = new System.Drawing.Size(1106, 563); 
    } 
    else if (button3.Text == "Hide") //this is where you should put an else 
    { 
     Size = new System.Drawing.Size(586, 563); 
     button3.Text = helpstring; 
    } 
} 
+0

Если вы отлаживаете этот метод (без «else»), выполнение будет вводиться как в «if» statemeent, а потому, почему это выглядит так, как будто ничего не происходит. Фактически, текст изменяется на «скрыть», но немедленно возвращается к «Справка». –

+0

else, если фиксированный цикл в коде !! Благодаря! – 2010-01-05 15:08:45

2

У вас есть два параллельных параллели. Первый блок будет выполнен, изменив текст кнопки на «Скрыть». Затем будет выполняться вторая, изменив текст на «Справка».

Вместо этого используйте блок else.

1

У вас есть амперсанд в тексте кнопки (например, & Справка или & Скрыть), чтобы пользователи могли использовать сочетание клавиш? Если это так, свойство text не будет равнозначным.

1

Есть пара проблем с этим кодом.

Прежде всего, сначала убедитесь, что событие щелчка кнопки правильно подключено к обработчику button2_Click, поскольку, как представляется, существует некоторое несоответствие между именем метода и объектами, указанными в методе. Именование на них должно быть исправлено в любом случае для удобства чтения.

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

Ваш код должен прочитать (включая переименование метод):

private void button3_Click(object sender, EventArgs e) 
{ 
    string helpstring = "Help"; 
    string hidestring = "Hide"; 
    if (button3.Text == helpstring) 
    { 
     button3.Text = hidestring; 
     Size = new System.Drawing.Size(1106, 563); 
    } 
    else 
    { 
     Size = new System.Drawing.Size(586, 563); 
     button3.Text = helpstring; 
    } 
} 

ПРИМЕЧАНИЯ: Там нет необходимости второго if, если только эти два возможных условия, простой else позволит повысить производительность и достичь желаемый эффект.

Смежные вопросы