2010-09-22 2 views
1

Я работаю над книгой под названием Head First C#. Он не объясняет, что цикл говорит подробно. Было бы здорово, если кто-нибудь сможет объяснить ту часть, которую я не понимаю. То, как я читаю это, пока c меньше 254, а видимое c будет увеличиваться на 1 каждый раз, когда цикл пройдет. То, что я не понимаю, - это (c, 255 - c, c)Объясните заявление в C#

private void button1_Click(object sender, EventArgs e) 
    { 

     while (Visible) 
     { 
      for (int c = 0; c < 254 && Visible; c++) 
      { 
       this.BackColor = Color.FromArgb(c, 255 - c, c); 
       Application.DoEvents(); 
       System.Threading.Thread.Sleep(5); 
      } 
     } 
    } 
+0

На стороне примечания, хотя это хорошо работает, чтобы показать поведение, постоянно действующее в пользовательском интерфейсе, очень плохо использовать DoEvents, как это в реальном коде. Обязательно помните, что это пример кода и не является хорошим способом создания фоновой цветной анимации. –

ответ

10
this.BackColor = Color.FromArgb(c, 255 - c, c); 

The arguments to that function are red, green, blue. Максимальное значение равно 255, а минимальное значение равно 0 . Эта функция изменяет цвет с полного зеленого на зеленый, полный красный-синий (пурпурный).

for (int c = 0; c < 254 && Visible; c++) 

Цикл будет продолжаться до тех пор, либо форма не становится невидимым (при условии, этот обработчик события на форме, Visible относится к this.Visible и будет ложным, если форма скрыта) или достигается максимальное значение (c < 254 будет ложным).

Вот диаграмма, которая показывает общие цвета на основе их красных, зеленых и синих значений. На графике формат RRGGBB, где RR - это красное значение, GG - это зеленое значение, а BB - это синее значение. Числа находятся в шестнадцатеричном формате (от 0 до FF вместо 0 до 255).

alt text

+0

Как и в стороне, «Видимый» - это просто логическое значение. Ничего не указано, что это связано с свойством «Видимый» самой кнопки. Таким образом, более конкретный терминатор будет до тех пор, пока логическое «видимое» не будет изменено на false каким-либо действием. –

+1

Хорошая уловка, и на самом деле я был не прав в любом случае - по умолчанию это означало бы видимость формы, а не видимость кнопок. –

4

Итак, это заявление, которое вы не понимаете, не так ли?

this.BackColor = Color.FromArgb(c, 255 - c, c); 

Вот установка BackColor свойство значения, возвращенного из метода Color.FromArgb. Аргументами этого метода являются c, 255 - c и c. Так, например, если c равно 100, он будет звонить Color.FromArgb(100, 155, 100).

В основном это анимирует цвет фона от зеленого (0, 255, 0) до фиолетового (253, 2, 253). Он делает это в довольно неприятную способом, используя Application.DoEvents и сделать нить сон UI, но, надеюсь, книга будет объяснить более хороший подход со временем :)

+0

, когда конец цикла или закончится – user770022

+1

@ randywhite30 - он закончится, когда либо c> = 254, либо логическое значение «Visible» будет изменено на false с помощью какого-либо действия –

+1

@ randywhite30: Я думал, что это был бит, который вы * * Понимаю... –

1

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

1

Описание поведения неверно.

Эта процедура будет непрерывно перемещать цвет от зеленого до пурпурного, а затем переустанавливать его на зеленый и делать это снова. Единственный выход цикла - если кнопка становится невидимой в ответ на то, что выполняется вызовом DoEvents().

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