Уроки C# - Прозрачность контролов Windows Forms - плавное появление текста в C# - controls opacity

Поделиться
HTML-код
  • Опубликовано: 5 окт 2024
  • Донаты и на кофе ➜ t.me/win10twea...
    Эксклюзив для спонсоров ➜ / xpuct
    Если недоступна спонсорка ➜
    Основной канал:
    / jailbreakvideo
    #Opacity #Transparency #Controls #UI #Animation #Transition #СиSharp #СиШарп
  • НаукаНаука

Комментарии • 96

  • @XpucT
    @XpucT  5 лет назад +20

    async void Button1_Click(object sender, EventArgs e)
    {
    /**************
    * Начальный цвет
    * 70, 130, 180
    *
    * Желаемый цвет
    * 135, 206, 250
    *
    **************/
    int count = 0;
    Again:
    for (byte r = 70, g = 130, b = 180; r = 180; r -= 6, g -= 8, b -= 7, await Task.Delay(20))
    label1.ForeColor = Color.FromArgb(r, g, b);
    label1.ForeColor = Color.FromArgb(70, 130, 180);
    count++;
    if (count < 3)
    goto Again;
    }

    • @nastyashot6130
      @nastyashot6130 4 года назад +7

      Во мне перфекционист бьет тревогу...))
      async public void button1_Click(object sender, EventArgs e)
      {
      for (byte[] i = { 240, 240, 240 }; i[0] >= 32 & i[1] >= 178 & i[2] >= 170; i[0] -= 10, i[1] -= 3, i[2] -= 4)
      {
      label2.ForeColor = Color.FromArgb(i[0], i[1], i[2]);
      label2.Text = Color.FromArgb(i[0], i[1], i[2]).ToString();
      await Task.Delay(100);
      }
      }

    • @XpucT
      @XpucT  4 года назад +3

      Нет предела совершенству =)

    • @orakul_azovstal
      @orakul_azovstal 3 года назад +2

      @@XpucT Ого, Хачатур ты гений, спасибо за такое решение.

  • @YariikR
    @YariikR 5 лет назад +19

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

  • @BobiBobObana
    @BobiBobObana 5 лет назад +4

    С циклом и счетчиком изящно вышел из трудной ситуации.

  • @redtayron6390
    @redtayron6390 5 лет назад +4

    Спасибо за урок Хачатур, как раз то что искал в интернете и не смог найти в таком объяснении как у тебя в видео))))))))

  • @ИльяВладимиров-у2б
    @ИльяВладимиров-у2б 3 года назад +2

    Вот это да!!! Я просто в восторге от такого решения.

  • @tvbox_
    @tvbox_ Год назад +1

    Хачатур, привет! Спасибо за видосики. Недавно начал изучать с# и твои видосы ну прям круто заходят. Хочу внести и свою лепту )) В видосе прозвучало "альфа канал, не запаривайтесь", а зря! Я занимаюсь видео и что такое альфа канал знаю, и им можно менять прозрачность! Поэтому начал читать про FromArgb. Короче у FromArgb есть четвертый параметр, вернее он первый: FromArgb(A, r, g, b). Он и работает как прозрачность. Его значение как и у цвета могут быть в диапазоне 0-255. 0 - прозрачен, 255 - непрозрачен. Меняя его значение можно менять прозрачность элемента. Правда, почему-то, на label он не сработал. А вот picturebox за милую душу. Остальные не пробовал.

  • @РоманСуворов-й2т
    @РоманСуворов-й2т Год назад +1

    Идея бомба, вот что значит инструмент в умелых руках, спасибо !

  • @acer6788
    @acer6788 Год назад +1

    Неплохо работает с кнопкой goto от Хачатура))
    void Button1_Click(object sender, EventArgs e)
    {
    M1();
    }
    async void M1()
    {
    Again:
    for (byte r = 80, g = 80, b = 100 ; r < 180 & g < 163 & b < 237 ; r+= 10, g+=8, b+=14, await Task.Delay(30))
    {
    Button1.ForeColor = Color.FromArgb(r,g,b);
    }
    for (byte r = 180, g = 163, b = 237; r >= 80 & g >= 80 & b >= 100; r -= 10, g -= 8, b -= 14, await Task.Delay(30))
    {
    Button1.ForeColor = Color.FromArgb(r, g, b);
    }
    Button1.ForeColor = Color.FromArgb(80, 80, 100);
    goto Again;
    }

  • @SCEEF
    @SCEEF 5 лет назад +3

    Можно кнопку центрировать - изначально размер ширины сделать 0 - а при каком то условии - плавно задать ширину) Магия

  • @xasthul2355
    @xasthul2355 5 лет назад +3

    Очень крутой видео урок! Спасибо.

  • @AllRockAndMetal
    @AllRockAndMetal 5 лет назад +4

    Интересно и подобные вещи в принципе помогают мыслить шире. Сам еще когда знакомился с VBA в экселе начал понимать, что любую идею в принципе можно запрограммировать, важно лишь объяснить идею понятными компьютеру командами. Однако в конкретном примере подобная прозрачность работает только при однотонном фоне, если же под элементом, который мы делаем прозрачным, лежит еще элемент, или же фон не однотонный, то данный способ не подходит)

    • @mrsad6611
      @mrsad6611 4 года назад

      вот именно

  • @profuter
    @profuter 3 месяца назад

    Я бы использовал одну переменную на желаемое число шагов и просто высчитывал значение каждой из 3 компонент цвета через текущую итерацию:
    byte shagov=10, r,g,b;
    for (byte i=1;i

  • @sergeykireev1431
    @sergeykireev1431 5 лет назад +6

    Классные уроки спасибо хотя люблю wpf

  • @АлександрГлазков-э7ь
    @АлександрГлазков-э7ь 4 года назад +5

    Именно тот случай, когда ООП действительно нужно. Можно создать класс, наследуемый от Label'a, задать в нем определенный набор функций, управляющих анимацией цвета, размера и т.д. В итоге не придется постоянно копипастить и создавать множество анимированных контролов.

    • @XpucT
      @XpucT  4 года назад

      Вооооооооот =)

  • @OleksandrYushchuk8
    @OleksandrYushchuk8 Год назад +1

    Спасибо за хорошую идею.
    Все просто, когда знаешь как :)

  • @vadymkon
    @vadymkon Год назад +2

    Хачатур, привет! Спасибо за видео! Всё круто, но вот с ProgressBar такая история почему-то не работает. Может есть мысли как для него сделать? Если наложить на него panel то она просто его закроет. Мб что-то ещё, мб это в следующих уроках?

  • @vitor_corve
    @vitor_corve 3 года назад +1

    Решил найти решение, как можно сделать прозрачность в WF. Загуглил, попал на этот видос. А тут автор сделал тоже самое, что и мне пришло в голову)) Я просто надеялся, что есть другой путь) Видимо нет)

  • @jozex8141
    @jozex8141 5 лет назад +6

    В начале урока решил сам подумать, как это можно сделать, и на 80% мои догадки сошлись с решением, понял что не так уж и глуп))))

  • @zaylen8389
    @zaylen8389 5 лет назад +1

    Однажды, я столкнулся с задачей. Пацан мне говорит: "Сможешь сделать такую херню как на старых DVD Samsung?" (ну, это когда их логотип по экрану ползает). К тому моменту я рандом не знал и решил сделать из одного угла до другого, но форма была не ровная, точно так же как и в твоей задаче, я не мог тупо сделать Location.X + 1. Задачу я сделал, но пришлось изменить форму до равностороннего квадрата. Тогда у меня не хватило мозгов подсчитать шаги, как ты сделал. Спасибо, короче)

  • @АртемЯнгутов-к9ч
    @АртемЯнгутов-к9ч 3 года назад +2

    Если написать так то label будет бесконечно менять цвет.
    for (byte r = 0, g = 0, b = 0; r = 0; r -= 6, g -= 8, b -= 7, await Task.Delay(50))
    {
    label2.ForeColor = Color.FromArgb(r, g, b);
    }

  • @tarmo9010
    @tarmo9010 4 года назад +1

    Дак ведь операция & намного хуже && так как вычисляются сначала все условия, а потом уже проверяются до первого совпадения, тогда как && сразу вычисляет и проверяет по одному.

  • @sergeyfrolov5237
    @sergeyfrolov5237 4 года назад +1

    Можно сделать в одном методе сложить так же и вычесть так как ргб числа могут быть разными меньше и больше попробовал получилось Спасбо за урок !
    async void button1_Click_1(object sender, EventArgs e)
    {
    for (byte r=199,g=21,b=133;r>=127&g

  • @samogon-channel7696
    @samogon-channel7696 5 лет назад +3

    Молодец!

  • @Colibri_Rent
    @Colibri_Rent 4 года назад

    По прежнему жду твоих видосов с нетерпением))))

  • @QozhykQozhyk
    @QozhykQozhyk 4 года назад +1

    Для кнопки
    FlatStyle->Flat
    BackColor->(Internet)Transparent

  • @korwin86
    @korwin86 4 года назад +1

    Спасибо за уроки! :)
    Я твоё дз сделал быстро(на самом деле в начале нихуя не заработало, перепутал всякие +- и т.д. но потом разобрался) и решил усложнить. Почему бы не сделать мигающую надпись и кнопку которая включала бы мигание и выключала. В начале сделал цикл while, потом понял что оно зацикливается и не отключается. Попробовал через метод, а он асинхронный и ему пофиг на меня. Пришлось читать метанит и микрософт о том, как отключить то, что не отключается. Ну и там пошло поехало, занял сам себе вечер. В начале сделал с двумя кнопками, потом сделал с одной. Не знаю на сколько правильно я сделал, но в итоге оно работает. На самом деле я и до просмотра твоих уроков что то там писал и делал, но как то раньше не мог разобраться и применить такие штуки как CancellationTokenSource, а тут оно вроде само как то случилось. Если можешь, скажи, что я сделал не так или как это можно было проще сделать. Спросить особо не у кого.
    public partial class Form1 : Form
    {
    public Form1()
    {
    InitializeComponent();
    }
    CancellationTokenSource cancelTokenSource = new CancellationTokenSource();
    bool click = false;
    void Button1_Click(object sender, EventArgs e)
    {
    if (!click)
    {
    click = true;
    CancellationToken token = cancelTokenSource.Token;
    Magick(click, token, cancelTokenSource);
    button1.Text = "не мигаем";
    }
    else if(click)
    {
    cancelTokenSource.Cancel();
    label1.ForeColor = Color.FromArgb(47, 79, 79);
    cancelTokenSource = new CancellationTokenSource();
    click = false;
    button1.Text = "мигаем";
    }
    }
    async void Magick(bool lol, CancellationToken token, CancellationTokenSource cancelTokenSource)
    {
    while (lol)
    {
    for (byte r = 47, g = 79, b = 79; r >= 0 & g

    • @XpucT
      @XpucT  4 года назад

      bool =) Я ждал его =)

  • @user_PsevdonimyEtoPolnyjOtstoj
    @user_PsevdonimyEtoPolnyjOtstoj 2 года назад

    А теперь всё тоже самое но контролы должны быть друг над другом. )))

  • @sheRzoid
    @sheRzoid 5 лет назад +1

    Спасибо. Лайк и подписка на оба канала

  • @ТвойХозяин-е8л
    @ТвойХозяин-е8л 5 лет назад +2

    пипетка)) Веселое слово

  • @КОД-ш8у
    @КОД-ш8у 5 лет назад +2

    19:30 досмотрел до этого момента и вдруг меня осенила мысль: так ведь надпись будет не плавно появляться из ниоткуда, надпись просто будет плавно ищзменять свой цвет, например из этого синего станет фиолетовой, потом жёлтой а потом уже такой как нам надо :-) продолжаю наблюдать эксперемент :-) и кстати, а не проще было бы воспользоваться альфа-каналом, ведь альфа-канал как раз и отвечает за прозрачность? вобщем смотрю до конца, забавный эксперимент. я когда то с модами для игры работал с цветами, мне эта тема довольно близка :-)

    • @XpucT
      @XpucT  5 лет назад +1

      С Альфа будет топорность, так дело имеем не с квадратом, а с линиями, где есть антиальясинг.
      Будет конфликт. Тут нужно именно из цвета в цвет 👍

  • @olegkulishov1178
    @olegkulishov1178 3 месяца назад

    Хачатур, приветствую. Подскажи пожалуйста, мне десктоп приложение нужно замутить, и сейчас выбор как раз завис на GUI. Также лучше WinForms использовать или Microsoft что-то лучше сделали? Заранее, спасибо!

  • @InsideBestKZ
    @InsideBestKZ Год назад

    Здравствуйте! А что если сделать так:
    1. Создать класс, который наследуется от Label, и у него прописать код, где добавить свойство Alpha, и сделать прорисовку текста, где используется значение данного свойства:
    using System.Drawing;
    using System.Windows.Forms;
    namespace MyProgram
    {
    public class LabelEx : Label
    {
    private int _alpha = 255;
    public int Alpha
    {
    get { return _alpha; }
    set { _alpha = value; Invalidate(); }
    }
    protected override void OnPaint(PaintEventArgs e)
    {
    using (Brush brush = new SolidBrush(Color.FromArgb(_alpha, ForeColor)))
    {
    e.Graphics.DrawString(Text, Font, brush, ClientRectangle);
    }
    }
    }
    }
    2. И потом использовать свойство Alpha для изменения прозрачности и создания анимации:
    public Form1()
    {
    InitializeComponent();
    Task.Run(async () => { labelEx1.Alpha = 0; while ((labelEx1.Alpha += 5) < 255) { await Task.Delay(30); } });
    }

  • @Colibri_Rent
    @Colibri_Rent 4 года назад +1

    Блин, вот смотрел Гошу Дударя, Объясняет мега поверхностно, непонятно что , для чего и зачем. Ты объясняешь идеально, все примеры мега яркие, хорошо запоминаются.Такой вопрос, где можно найти информацию про (as "отправитель как объект, уже день мучаюсь со строчками кода, там всего ничего, но я не понимаю как это работает, не мог бы дать информацию, где можно найти можно найти информацию по этому(Тавтология))(суть в том, что у меня есть Контейнер panel, в нем содержаться Label и PictureBox.(а эти объекты создаются по нажатию другой кнопки(динамично) И нужно как то сделать так, что бы бы по нажатию любого PictureBox менялся Label и panel именно тот, в котором находится сам PictureBox(Вот что мне предложили( var pb = sender as PictureBox;
    if (pb != null)
    {
    var parent = pb.Parent;
    }
    var result = picture_Start.Parent.Controls.OfType().First();
    if (pb == null) return;
    var label = pb.Parent.Controls.OfType().First();
    label.Font = new Font(label.Font, FontStyle.Strikeout); Где найти информацию по этой теме

    • @XpucT
      @XpucT  4 года назад +1

      Я бы не так делал.
      Я as вообще ни разу не использую. Конкретно в Твоём случая Я бы указывал имя контрола таким лайфхаком:
      ((Label)sender).Text
      То есть это будет тот самый контрол, который вызвал событие.
      В Win 10 Tweaker точно также динамично расставляются Label, Button, Panel, toolTip и прочие.
      И тот, кто нажмёт, у кого и будет смена. И прикол в том, что контролы у Меня называются по одному типу.
      То есть label - Paint, Button - PaintButton, Удалить - Paint_del и т.д.
      И вся эта красота выстраивается динамично на нескольких языках под разный масштаб.
      Я бы дал Тебе код, но не знаю откуда копировать, ибо вложения дикие и Ты запутаешься ещё больше.
      Поэтому начни гуглить строку, которую Я предложил на примере Label:
      ((Label)sender).Text

    • @Colibri_Rent
      @Colibri_Rent 4 года назад +1

      @@XpucT Понял, спасибо большое))

    • @XpucT
      @XpucT  4 года назад +2

      @@Colibri_Rent v001.radikal.ru/2006/cf/6231955351-6-b5149fb95186992e9fedaafac0ab2fc6.mp4

    • @Colibri_Rent
      @Colibri_Rent 4 года назад +1

      @@XpucT Спасибо огромное, это прям очень приятно, что выделил время и записал объяснение для меня. Я действительно понял как делать, очень круто объяснил. Спасибо большое, я твой вечный поклонник♥))

  • @kashiroko6632
    @kashiroko6632 4 года назад +2

    а можно использовать вместо большого for цикл while с &&? потом чтобы не высчитывать разницу просто сделать if else?

    • @XpucT
      @XpucT  4 года назад +1

      Можно и так. Очень даже 👍

  • @sergeyzaitsev2060
    @sergeyzaitsev2060 3 года назад +1

    Подскажите как реализовать следующее:
    Есть основная форма Form1, при загрузке Form1_Load для нескольких кнопок устанавливается свойства Enabled=false (реализовал через свойство панели на которую добавил кнопки - panel1.Enabled = flag1 где flag1 это переменная типа Bool созданная в глобальном классе, которая видна из обоих форм). На основной форме Form1 есть кнопка для ввода пароля, по нажатию на которую открывается Form2 где можно ввести пароль и если он корректный, то глобальной переменной flag1=true и форма Form2 закрывается. Надо чтобы после закрытия Form2 форма Form1 скажем так обновилась/перерисовалась и те кнопки что расположены на панели стали активными. Искал информацию на форумах других ютуб каналах, но так не смог найти как сделать желаемое.

  • @tyuop
    @tyuop 5 лет назад

    1. А с задним фоном нельзя что-то подобное сделать?
    2. Можно ли тексту присвоить градиент (от одного цвета к другому, либо все цвета)
    3. Можно ли сделать свою четвертую кнопку в titlebar’е без кастомной панели? (Чтобы на Windows 10 и Windows 7 они выглядели как обычное окно с еще одной кнопкой, как это делал TeamViewer) Можно конечно добавить уже заготовленную кнопку (?), но нужна своя иконка.
    Спасибо!

    • @XpucT
      @XpucT  5 лет назад +2

      1. Можно
      2. Можно, но для градиента нужно подключать событие Paint. Мы его пока отдельно не рассматривали.
      3. Можно и мы доберёмся обязательно.
      Как и обещал любой сможет потом собрать такую программу, как Win 10 Tweaker, в которой как раз свои кнопки и прочее.

  • @isRiko
    @isRiko 3 года назад +1

    идея хорошая, но хотелось бы универсальности %)

  • @pixel183
    @pixel183 4 года назад +2

    класс а почему никто не пользуется таймером?

    • @XpucT
      @XpucT  4 года назад

      Можно и таймером, тоже удобно.

  • @Demoston
    @Demoston 2 года назад +1

    А такого нет? (свойство BackStyle в Transparent)

    • @XpucT
      @XpucT  2 года назад

      Неа

  • @Kozyreva_Svetlana
    @Kozyreva_Svetlana 2 года назад +1

    Можно порефакторить и создать метод

  • @ВалерийВаланчус
    @ВалерийВаланчус 3 года назад

    Как можно использовать элементы второй формы из первой формы и что для этого нужно сделать ? Если это сделать через объект формы то можно поменять свойства второй формы . А вот как получить доступ
    к свойствам элементов второй формы ?

  • @ДимычДимон-г3ю
    @ДимычДимон-г3ю Месяц назад

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

  • @СофьяКрюкова-х5о
    @СофьяКрюкова-х5о 2 года назад +1

    Помогите, пожалуйста. Решил сделать плавное появление label и textbox. С лейблом всё отлично, а текстбокс не корректно работает. Он начинает скакать по цветам
    async private void Form1_Load(object sender, EventArgs e)
    {
    /* начальный цвет
    255,165,0
    желаемый цвет label
    127,255,212
    желаемый цвет textbox
    255,255,255
    */
    await Task.Delay(1000);
    for (byte r = 255, g = 165, b = 0; r >=127 & g

    • @XpucT
      @XpucT  2 года назад

      Важно помнить, что нельзя прыгнуть из жёлтого сразу в синий (например), потому что это противоречит спектру цветов - тому, как один цвет переходит в другой.
      Чтобы это понимать, посмотрите пример:
      i.imgur.com/jAAQFtS.jpg
      i.imgur.com/MiDQ3AA.jpg
      i.imgur.com/NvYFFCk.png

  • @raiziman7430
    @raiziman7430 2 года назад

    а разве там у вас не условный оператор "И" стоит который не остановит цикл пока все условия не выполнятся?

    • @XpucT
      @XpucT  2 года назад

      Про if есть отдельное видео.
      ruclips.net/p/PL05SB3rBbUsraqiEUeS70RKhVAu97nGeb

  • @flynntaggart9973
    @flynntaggart9973 Год назад +1

    а как можно сделать прозрачный фон для картины в picturebox ?

    • @XpucT
      @XpucT  Год назад +1

      Да. Есть отдельное свойство у формы TransparencyKey.
      Если Ты установишь его цвет в зелёный, а также в картинке будет зелёный, то он будет заменён на прозрачный.

    • @flynntaggart9973
      @flynntaggart9973 Год назад +1

      @@XpucT ок, спасибо

  • @МихаилМолодцов-ч7ч
    @МихаилМолодцов-ч7ч 3 года назад +2

    Ты гуру .NET

  • @АлеАле-ч2й
    @АлеАле-ч2й 5 лет назад

    а можно гифку засунуть?
    _ интересна наверно можно _ а можно тогда события ловить когда она закончилась / заного началась..

  • @eas1ly380
    @eas1ly380 4 года назад

    Мне кажется полегче было бы сделать r++,g++,b++ и паузу сделать поменьше намного)

    • @Дмитрий-е9в3в
      @Дмитрий-е9в3в 3 года назад

      не. Если у тебя разница между R G и B от начального до конечного одинаковая, тогда вариант ок, но если нет, тогда 1 из цветов, когда достигнет желаемого тобой значения, продолжит "инкримироваться", и на выходе будет не тот цвет, который ты заказывал

  • @ВладПідгайний-х8э
    @ВладПідгайний-х8э 5 лет назад

    Можно сделать чуть более плавную анимацию вот так:
    async private void Button1_Click(object sender, EventArgs e)
    {
    label1.Text = "Появляшка";
    // 70 130 180
    // 130 210 250
    label1.ForeColor = Color.FromArgb(70, 130, 180);
    for (byte r = 70, g = 130, b = 180; r = 180)
    {
    b--;
    }
    label1.ForeColor = Color.FromArgb(r, g, b);
    }
    }

    • @ВладПідгайний-х8э
      @ВладПідгайний-х8э 5 лет назад

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

    • @omoloni
      @omoloni 4 года назад

      нет, так будет смещение по всему спектру

  • @JINERAL
    @JINERAL 4 года назад

    Во время выполнения цикла если нажать кнопку ещё раз то надпись начинает моргать, и чем больше нажимаешь тем хуже становится. Вопрос к знатокам - как заблокировать кнопку на время выполнения цикла? , чтобы она просто не реагировала на нажатие? Лайк кому тоже интересно как это можно сделать.

    • @XpucT
      @XpucT  4 года назад +1

      Самым простым решением в таких случаях является bool.
      Объявляешь его над всеми, типа:
      bool working = true;
      В клике проверяешь:
      if (!working)
      {
      // выполнять код
      }
      А когда завершается цикл, самой нижней строчкой делаешь working = false;
      Таким образом, пока цикл работает working = true и не даст ничего сработать кнопке.
      Как только цикл завершился и сказал, что working = false, кнопка спокойно выполнит сценарий.

  • @MaN69k
    @MaN69k 5 лет назад

    Как можно эти проверки написать проще?
    for(byte r=70, g=130, b=180;r

    • @XpucT
      @XpucT  5 лет назад

      Убрать фигурные скобки. Короче никак.

    • @MaN69k
      @MaN69k 5 лет назад

      @@XpucT спасибо)

    • @omoloni
      @omoloni 4 года назад

      эти проверки бессмыслены

    • @omoloni
      @omoloni 4 года назад

      нужно сделать другие и написать континуе, перед инкрементом

  • @genius_god5975
    @genius_god5975 5 лет назад

    Христ, как полностю востановить обновления виндовс?Я рисетнул в твикере но ничего не изменилось.Windows Update.

    • @XpucT
      @XpucT  5 лет назад

      После включения Центр обновлений Windows и Update Orchestrator Service просто перезагрузись. Вот и весь лайфхак =)

    • @genius_god5975
      @genius_god5975 5 лет назад

      @@XpucT а если Центр обновлений Windows в службах нет?

    • @XpucT
      @XpucT  5 лет назад

      @@genius_god5975 Win 10 Tweaker ➜ Службы ➜ Смотреть внимательно

    • @XpucT
      @XpucT  5 лет назад

      @@genius_god5975 но, если речь о том, что служба вообще вырезана, то это не ко Мне, вырезать её с корнями Я не советую.

  • @orakul_azovstal
    @orakul_azovstal 3 года назад +1

    Вот плавное исчезновение текста, можно и для плавного закрытия формы прикрутить) ruclips.net/video/9yzcX5as5P0/видео.html

  • @barcode8927
    @barcode8927 Год назад

    Хм, я почему-то на 100% уверен, что информация, как сделать текст, плавно меняющий цвет, да ещё и на 30 минут отдельного урока, - это совсем не нужная информация, когда целью стоит научить языку.

  • @ВладимирВладимирович-ю6х

    Орёл!!!

    • @XpucT
      @XpucT  4 года назад

      🐦

  • @maximuspolo7742
    @maximuspolo7742 2 года назад +1

    private async void button1_Click(object sender, EventArgs e)
    {
    for (int r = 70, g = 130, b = 180; r = 180; r--, g--, b--, await Task.Delay(30))
    {
    if (r == 70) r++;
    if (g == 130) g++;
    if (b == 180) b++;
    label1.ForeColor = Color.FromArgb(r, g, b);
    if (r == 71 & g == 131 & b == 181)
    break;
    }
    }

  • @anatoliinavrockiy8607
    @anatoliinavrockiy8607 4 года назад

    На самом деле это довольно плохой пример. Я бы сделал это через интерполяцию трехмерных векторов. А в процессе интерполяции из вектора доставал значение каждой оси и переводил в rgb.
    Мне нравятся твои видео, но это я считаю глупым решением. Правда для новичков чисто в образовательных целях сойдет

    • @XpucT
      @XpucT  4 года назад

      На самом деле - это единственный рабочий пример. Быстрый, короткий.
      Давай взглянем на твой не плохой 🤝

    • @anatoliinavrockiy8607
      @anatoliinavrockiy8607 4 года назад

      @@XpucT я весь код писать не буду, но примерно это будет выглядеть вот так:
      private Vector3 color_start = new Vector3( 0f, 0.5f, 0.7f );//начальный цвет
      private Vector3 color_end = new Vector3( 0.9f, 0.1f, 0.2f );//конечный цвет
      private float duration = 1f;//время перехода в секундах
      ...тело метода. Допустим цикл с задержкой:
      new Vector3 color_result = Vector3.Lerp( color_start, color_end, Time.deltaTime / duration );//линейная интерполяция двух векторов
      Ну а дальше нужно просто из вектора вытащить 3 компонента цвета и применить куда нужно.
      Плюс такого метода в том, что все компоненты будут линейно изменять свои значения и мы можем выставить время, за которое они полностью изменятся.
      Например если красный был в начале 0 а в конце 1, зеленый был 0 а в конце 0.1, то их изменение к конечному цвету будет все равно за одинаковый промежуток времени. Не нужно следить в какую сторону изменять компонент цвета, в плюс или минус. И не нужно будет городить огород.
      С помощью библиотеки Mathf можно сделать тоже самое без использования векторов, но тогда нужно будет каждый компонент цвета обрабатывать отдельно. Типа так:
      float red_result = Mathf.Lerp( r_start, r_end, Time.deltaTime / duration );
      И так для каждого цвета.
      Можно даже сделать нелинейную интерполяцию, но это уже другая история)