Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 30.07.2015
Сообщений: 48

Плавное изменение размеров компонента

14.12.2015, 10:52. Показов 2582. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Написал функцию по изменению размера контролла, в теории должна быть анимация, но её нет.
Подскажите где ошибка?
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    Private Sub resize(ByVal obj As Control, ByVal WidthInt As Integer, ByVal HeigthInt As Integer, Optional newWidthInt As Integer = 0, Optional newHeigthInt As Integer = Nothing)
        If newWidthInt <> Nothing Then
            If WidthInt < newWidthInt Then
                For i As Double = WidthInt To newWidthInt Step 0.01
                    obj.Size = New Size(width:=i, height:=HeigthInt)
                Next
            Else
                For i As Double = WidthInt To newWidthInt Step -0.01
                    obj.Size = New Size(width:=i, height:=HeigthInt)
                Next
            End If
        End If
        If newHeigthInt <> Nothing Then
            If HeigthInt < newHeigthInt Then
                For i As Double = HeigthInt To newHeigthInt Step 0.01
                    obj.Size = New Size(width:=WidthInt, height:=i)
                Next
            Else
                For i As Double = HeigthInt To newHeigthInt Step -0.01
                    obj.Size = New Size(width:=WidthInt, height:=i)
                Next
            End If
        End If
    End Sub
p.s. В релизе на C# присутствует анимация.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.12.2015, 10:52
Ответы с готовыми решениями:

Плавное перемещение компонента при нажатии на кнопку
Как сделать чтобы при нажатии на кнопку компонент плавно меремещался вверх или вниз?

Плавное изменение цвета лейбла
Кто знает плавно изменять цвет лейбла у VB.NET? Для VB 6 я использовал функцию RGB. Код программы у VB 6: Option Explicit Dim intR...

Плавное изменение цвета контрола
Ребят, столкнулся с проблемой. Написал код для плавного изменения цвета(Уж как умею), но он работает криво, немного мерцает и цвета резко...

12
Модератор
Эксперт .NET
 Аватар для Yury Komar
4357 / 3427 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
14.12.2015, 12:01
Размеры контролов не должны иметь тип данных Double...
0
0 / 0 / 0
Регистрация: 30.07.2015
Сообщений: 48
14.12.2015, 12:11  [ТС]
оно работает, но нет плавности в изменении размера.
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4357 / 3427 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
14.12.2015, 12:29
Ну попробуйте изменить Step на 0.001... просто весь процесс анимации проходит видимо слишком быстро.
1
0 / 0 / 0
Регистрация: 30.07.2015
Сообщений: 48
14.12.2015, 12:37  [ТС]
спасибо. попробую.
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4357 / 3427 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
14.12.2015, 13:01
нет, я проверил, тут вобщем проблема в том, что у вас происходит изменение размера в цикле, без задержки... поэтому анимация выполняется оооочень быстро и вы ее просто не видите...

перепишите код с использованием например таймера.... Ну и покажите пожалуйста код из C#, который вроде как плавно у вас отрабатывает анимацию, уж очень интересно.
0
0 / 0 / 0
Регистрация: 30.07.2015
Сообщений: 48
14.12.2015, 13:09  [ТС]
Знаю код можно упростить, но работал давно и переписывать не стал
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
if (listBox1.Visible == true)
                
            {
                Int32 now = this.Width;
                listBox1.Visible = false;
                for (int i = now; i >= 361; i--)
                {
                this.Width = i;
                }
                this.Height = 201;
            }
            else
            {
                Int32 now = this.Width;
                for (int i = now; i <= 641; i++)
                {
                    this.Width = i;
                }
                this.Height = 201;
                listBox1.Visible = true;
            }
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4357 / 3427 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
14.12.2015, 13:18
так это ведь то же самое что и предыдущий код... приращение единицы ширины происходит так же в цикле, который выполняется практически моментально и без задержек... Как он у вас ПЛАВНО работал, понятия не имею...

Добавлено через 1 минуту
Используйте Таймер с небольшой (регулируемой) задержкой...

Добавлено через 1 минуту
Перевод на VB.NET
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
        If listBox1.Visible = True Then
            Dim now As Int32 = Me.Width
 
            listBox1.Visible = False
            For i As Integer = now To 361 Step -1
                Me.Width = i
            Next
 
            Me.Height = 201
        Else
            Dim now As Int32 = Me.Width
 
            For i As Integer = now To 641
                Me.Width = i
            Next
 
            Me.Height = 201
            listBox1.Visible = True
        End If
0
0 / 0 / 0
Регистрация: 30.07.2015
Сообщений: 48
14.12.2015, 13:20  [ТС]
возможно это связано с формой, перерисовать форму сложнее чем отдельный контролл.
спасибо. буду пробовать через таймер.
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4357 / 3427 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
14.12.2015, 13:47
Лучший ответ Сообщение было отмечено Yury Komar как решение

Решение

Evgeny799, ну вот пример (на форме кнопка с текстом "Увеличить"):

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
    Public Class Form1
    Dim Increase As Boolean = Nothing
    Dim AniCTRL As Object = Nothing
    Dim newWidth, oldWith As Integer
 
    Private Sub Timer1_Tick(sender As Object, e As EventArgs)
        If Increase Then
            If AniCTRL.Width < newWidth And AniCTRL.Width <> newWidth Then
                AniCTRL.Width += 5
            Else
                sender.Stop
                Increase = Nothing
            End If
        Else
            If AniCTRL.Width > oldWith And AniCTRL.Width <> oldWith Then
                AniCTRL.Width -= 5
            Else
                sender.Stop
                Increase = Nothing
            End If
        End If
    End Sub
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        AniCTRL = Me
 
        If sender.Text = "Увеличить" Then
            sender.Text = "Уменьшить"
            Increase = True
            newWidth = Me.Width + 100
            oldWith = Me.Width
        ElseIf sender.Text = "Уменьшить" Then
            Increase = False
            sender.Text = "Увеличить"
        End If
 
        Dim Timer1 As New Timer With {.Interval = 1, .Enabled = False}
        AddHandler Timer1.Tick, AddressOf Timer1_Tick : Timer1.Start()
    End Sub
2
Модератор
Эксперт .NET
 Аватар для Yury Komar
4357 / 3427 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
14.12.2015, 13:55
Вот только название вашей темы
Работа с графикой
совсем не подходит под описание и физику вашего вопроса...
0
0 / 0 / 0
Регистрация: 30.07.2015
Сообщений: 48
14.12.2015, 14:15  [ТС]
Спасибо за пример. А как лучше его назвать.
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4357 / 3427 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
14.12.2015, 14:40
Да уже поздно, вы не можете изменить название темы...
это вам на будущее, чтоб других не путать...
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.12.2015, 14:40
Помогаю со студенческими работами здесь

Плавное изменение Location у PictureBox
Доброго времени суток. Возникла такая проблема: На форме 3 горизонтальных элемента Panel. В каждом из них по 2 PictureBox с картинкой...

Плавное изменение цвета PictureBox при изменении параметров TrackBar
На форме есть два PictureBox : синий и красный. Как при движении TrackBar плавно делать светлее красный и синий цвета ?

Изменение размеров Image
Как можно изменить размеры Image ? Подскажите, пожалуйста

Изменение размеров столбцов DataGridView
В DataGridView, который заполнен на основе привязки данных, столбцы не изменяют свой размер (не появляется изменение курсора мыши), при...

Автоматическое изменение размеров ListBox
На форме есть ListBox1 он имеет определённые размеры(по умолчанию) как сделать чтобы при запуске формы ListBox1 автоматически менял свои...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 01.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 31.01.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru