Карточка с Анимацией на C# - User Control

Поділитися
Вставка
  • Опубліковано 6 жов 2024
  • В этом видео-уроке я создам красивый user control на C# Windows Froms. Для рисования современного gui и реализации анимации, я воспользовался стандартными средствами Visual Studio и возможностями языка программирования c#.
    Подписывайтесь на мой канал: ua-cam.com/users/eg...
    Конечно анимацию и такой элемент управления можно реализовать на WPF, но я захотел поэкспериментировать и что у меня получилось я показал в видео.
    $Donate: donationalerts...
    VK: eegolds
    GitHub: github.com/Egolds
    Привет, меня зовут Артём. Программирование - это мое хобби, а в мае 2019 года я стал .NET C# разработчиком, и теперь, просто увлечение превратилось в мою работу. Я стараюсь постоянно развиваться, получать новые знания, новый опыт и всем этим я делюсь с вами на этом канале. Надеюсь мой контент приносит вам пользу, чем-то помогает, возможно вдохновляет. Смотрите мои видео, оценивайте их, пишите свое мнение в комментариях и если вам действительно нравятся - обязательно подписывайтесь на канал.
    Спасибо всем за поддержку!
    #Анимация #Egolds #UserControl

КОМЕНТАРІ • 60

  • @egolds
    @egolds  5 років тому +5

    Исходный код для изучения:
    github.com/Egolds/EgoldsCardWithAnimation

    • @manuchehrrajabov2719
      @manuchehrrajabov2719 5 років тому

      👨‍💻👍

    • @алвдвлпаово
      @алвдвлпаово 3 роки тому

      Будет ещё видео по анимациям? Есть куча примеров на JS, а на C# их мало. Bounce animation, наприиер.

  • @brayanhustler93
    @brayanhustler93 5 років тому +5

    Только начал изучать Си-шарп
    Посмотрел, охренел...
    но лайк влепил.

    • @egolds
      @egolds  5 років тому +1

      Спасибо большое) удачи в изучении)

  • @mqst
    @mqst Рік тому +1

    Почему я раньше это не нашел?
    Офигенный контент

  • @thesinglesignal6308
    @thesinglesignal6308 5 років тому +13

    Нихуя не понял, но очень интересно :D

    • @egolds
      @egolds  5 років тому +1

      Пхаха)

  • @Димитрий-п1к
    @Димитрий-п1к 5 років тому +12

    Дядя,пилишь годный контент,снимай чаще.

    • @egolds
      @egolds  5 років тому +2

      Спасибо, буду стараться)

  • @АлександрПьянков-д3щ
    @АлександрПьянков-д3щ 5 років тому +9

    Здорово. По моему мнению было бы ещё лучше, если бы повествование было бы более размеренным. А то иногда сложно понять из-за того,что мыслью не успеваешь за повествованием.

    • @egolds
      @egolds  5 років тому +2

      Понял, постараюсь учесть)

  • @pika4uwf159
    @pika4uwf159 2 роки тому +2

    Всё супер, но скорость перехода что аж порой не понятно что куда копипастишь и меняешь. Не спеши ты так.

  • @puser-yh9lv7kl1h
    @puser-yh9lv7kl1h 3 роки тому +2

    откуда и что за using EgoldsUI ? подскажите пожалуйста

  • @vadimlikhachev424
    @vadimlikhachev424 Рік тому

    Круто спс

  • @user-rx4zk8um1f
    @user-rx4zk8um1f 5 років тому +3

    Идея для видео: анимированный toggle switch (разных видов). Спасибо за видос, но кода слошком много...

    • @egolds
      @egolds  5 років тому +2

      Как раз что-то такое думал сделать, спасибо, в следующем видео на эту тему будет меньше кода, так как аниматор уже написан)

    • @user-rx4zk8um1f
      @user-rx4zk8um1f 5 років тому

      @@egolds Еще вопрос. А как я могу изменить такой текст как в TextBox? Не знаю, как правильно задать вопрос гуглу.

    • @egolds
      @egolds  5 років тому

      @@user-rx4zk8um1f текст чего? Контрола из видео, для этого нужно создавать свойство с помощью конструкции { get; set; }

    • @user-rx4zk8um1f
      @user-rx4zk8um1f 5 років тому

      @@egolds Я имел ввиду текстовое поле, которое можно изменять при работе программы.

    • @egolds
      @egolds  5 років тому

      @@user-rx4zk8um1f "А как я могу изменить такой текст как в TextBox?" я понял что речь о текстовом поле для ввода - textbox, но что ты хочешь изменить? Текст textbox'a программно? textbox.text = "твой текст"

  • @exilandsoftware772
    @exilandsoftware772 4 роки тому

    Супер. Молодец.
    Egolds, cкажи пожалуйста какой прогой снимаешь скринкаст (видео с экрана)? zoom на определенные фрагменты кода особенно смотрится.

    • @egolds
      @egolds  4 роки тому

      Спасибо)
      Снимаю на Bandicam, а zoom уже делаю при монтаже, монтирую в Adobe Premiere Pro

  • @Stervo4ko
    @Stervo4ko 3 роки тому

    Я вот не понимаю, делаю все по порядку, а он мне в Animator говорит, что Animation не может быть List

  • @ЕвгенийПашин-ш7д

    Почему так мало лайков???

  • @deandomino8501
    @deandomino8501 4 роки тому

    Я так понимаю фоновый поток в аниматоре после запуска работает постоянно?

    • @egolds
      @egolds  4 роки тому +2

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

  • @RuyGuerra83
    @RuyGuerra83 5 років тому +1

    Hi friend!
    I'm from Brazil, congratulations on the video, very good.
    In my public float TargetValue, it shows an error in "get => targetValue;" it says "not all code paths return a value".
    code cheat:
    public float TargetValue
    {
    get => targetValue;
    set {targetValue = value; Reverse = value

    • @egolds
      @egolds  5 років тому

      Hi,
      Thank you very much!
      Try just add "return" into "get => targetValue;".
      Like this:
      "...
      get => return targetValue;
      ..."
      Maybe problem is in visual studio version.
      You also can get full project here:
      github.com/Egolds/WinFormsUserInterface
      Good luck!

    • @Patriot_Play
      @Patriot_Play 4 роки тому

      @@egolds return не помогает, сидел искал информацию не нашел. Если знаете как пофиксить то подскажите пожалуйста

    • @egolds
      @egolds  4 роки тому

      @@Patriot_Play я там немного ошибся, правильно будет вот так:
      "...
      get { return targetValue; }
      ..."

  • @Dezmont0
    @Dezmont0 4 роки тому +1

    В классе Animator вылетает ошибка: Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
    Имя параметра: index. Это вылетает на строчке: AnimationList[index].UpdateFrame();. Повялется в рандомное время выполнения программы, никакой закономерности нет. Из-за чего это может быть и как это исправить?

    • @egolds
      @egolds  4 роки тому

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

    • @Dezmont0
      @Dezmont0 4 роки тому

      @@egolds Спасибо, а можешь как то немного поподробнее способ решения здесь подсказать? А то мы хотели дизайн в нашем проекте в вузе использовать, скоро сдача. Ахахаха

    • @egolds
      @egolds  4 роки тому

      Я имею ввиду, заменить в методе AnimationInvoker() вот этот код:
      Parallel.For(0, Count(), index =>
      {
      AnimationList[index].UpdateFrame();
      });
      На вот этот:
      for (int i = 0; i < AnimationList.Count; i++)
      {
      try
      {
      AnimationList[i].UpdateFrame();
      }
      catch { }
      }

    • @Dezmont0
      @Dezmont0 4 роки тому

      @@egolds Большое спасибо, все заработало!

    • @egolds
      @egolds  4 роки тому

      Пожалуйста)

  • @ГригорийЗорров
    @ГригорийЗорров 4 роки тому

    Не подскажете с чем может быть связана ошибка?
    Ошибка CS0118 'Animation" является пространство имен, но используется как тип.

    • @egolds
      @egolds  4 роки тому +1

      покажи пример, как ты используешь данный класс, возможно какое-то пространство имен уже существует с таким названием как класс.

    • @ГригорийЗорров
      @ГригорийЗорров 4 роки тому +1

      @@egolds напутал с namespace всё ок)

  • @100kgstyle9
    @100kgstyle9 4 роки тому

    Совершенно не понимаю как вместо фона подставить картинку, при добавлении PictureBox картинка загружается будто на самый верхний слой и перекрывает всю анимацию. Подскажи пожалуйста как это можно реализовать?

    • @egolds
      @egolds  4 роки тому

      думаю картинке тоже нужно определить Rectangle и менять его высоту в аналогии к шторке

  • @user-rx4zk8um1f
    @user-rx4zk8um1f 4 роки тому

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

    • @egolds
      @egolds  4 роки тому +1

      Привет, вот таймкод: 10:15
      В этом моменте есть строка в событии OnPaint:
      Rectangle rectCurtain = new Rectangle(0, 0, Width - 1, (int)animCurtain.Value);
      Когда наводим мышку на компонент, вызываем метод DoCurtainAnimation(); В котором создается объект анимации, в неё мы передаем метод Invalidate(Он вызывает OnPaint), чтобы каждый шаг выполняемой анимации, вызывался этот метод (Invalidate), то есть перерисовка (событие OnPaint).
      Получается, что высота шторки равна значению animCurtain.Value, мы увеличиваем/уменьшаем значение Value и обновляем элемент управления. И получается вот такой эффект, как на видео.
      Надеюсь понятно объяснил)
      Вот тут если что есть исходник:
      github.com/Egolds/WinFormsUserInterface/blob/master/yt_DesignUI/Controls/EgoldsCard.cs

    • @user-rx4zk8um1f
      @user-rx4zk8um1f 4 роки тому

      @@egolds Ааааааааааа... А я думал анимация взаимодействует с контролом, а тут наоборот, контрол взаимодействует с анимацией. Я понял

  • @тонистарк-д3ь
    @тонистарк-д3ь 5 років тому +2

    Windows Froms спасибо не надо

    • @egolds
      @egolds  5 років тому +1

      Почему?

    • @тонистарк-д3ь
      @тонистарк-д3ь 5 років тому +1

      @@egolds ФРОМС =)

    • @тонистарк-д3ь
      @тонистарк-д3ь 5 років тому +1

      Но и forms тоже не надо, на wpf куда быстрее и приятнее.

    • @egolds
      @egolds  5 років тому

      @@тонистарк-д3ь ну так формс, я спрашиваю что не так?
      Суть видео в том, что современный интерфейс, я смог реализовать на winforms, позже будут ролики и на wpf, но сейчас контент-план такой