Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/25: Рейтинг темы: голосов - 25, средняя оценка - 4.64
5 / 3 / 1
Регистрация: 31.03.2014
Сообщений: 200

Перемещение Label по форме с ограничением движения другими Labels

13.03.2015, 16:31. Показов 4604. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть Label ввиде стены вверху окна программы, такой же внизу окна, а посередине двигающийся Label, хочу чтоб он двигался вверх вниз в рамках ввернего и нижнего Label.

C#
1
2
3
4
5
private void timer1_Tick(object sender, EventArgs e)
        {
            if (labeltop.Location.Y <= labelrun.Location.Y-17)
            labelrun.Location = new Point(labelrun.Location.X,labelrun.Location.Y-1);
        }
labelrun доходит до labeltop и останавливается, не знаю как применить сюда labelbot.Location(нижняя стена) чтоб после того как он дошел до верха начал ехать вниз, а когда до низу, опять вверх
1
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.03.2015, 16:31
Ответы с готовыми решениями:

Перемещение Label по форме
При щелчке мышью по кнопке «ВВЕРХ» надпись «Delphi - это сила!» должна перемещаться вверх на 10 пискелей

Перемещение fixed блока с ограничением
Страница поделена на 2 части. В правой части &lt;div&gt; с position: fixed; Соответственно при прокручивание страницы, фиксированный блок...

Как сделать так что, если на 2 форме значение label.caption поменялось, то и на 1 форме у label.caption было такое же
У меня есть 2 формы. На них есть по одному label. Как сделать так что, если на второй форме-значение label.caption поменялось, то и на 1...

6
93 / 94 / 51
Регистрация: 19.06.2013
Сообщений: 323
13.03.2015, 16:51
Набросал на скорую руку:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
private bool UP = true;
 
private void timer1_Tick(object sender, EventArgs e)
{
    if (labeltop.Location.Y == labelrun.Location.Y - 17)
        UP = false;
    if (labelbot.Location.Y == labelrun.Location.Y + 17)
        UP = true;
 
    if (UP)
        labelrun.Location = new Point(labelrun.Location.X, labelrun.Location.Y - 1);
    else
        labelrun.Location = new Point(labelrun.Location.X, labelrun.Location.Y + 1);
}
1
5 / 3 / 1
Регистрация: 31.03.2014
Сообщений: 200
13.03.2015, 16:53  [ТС]
BroDIK, не много ли кода?
0
93 / 94 / 51
Регистрация: 19.06.2013
Сообщений: 323
13.03.2015, 17:29
Лучший ответ Сообщение было отмечено newbiecoderr как решение

Решение

newbiecoderr, ох, простите, Сир! Вы, по-моему, и до этого не догадались!

Добавлено через over 10000 секунд
C#
1
2
3
4
5
6
7
8
private int k = -1;
 
private void timer1_Tick(object sender, EventArgs e)
{
    if ((labeltop.Location.Y == labelrun.Location.Y - 17) || (labelbot.Location.Y == labelrun.Location.Y + 17))
        k *= -1;
    labelrun.Location = new Point(labelrun.Location.X, labelrun.Location.Y + k);
}
Добавлено через 20 минут
Вариант выше будет работать, только если Вы собираетесь прибавлять всегда по одному пикселю. Если Вы будете прибавлять по 3 пикселя, нет гарантии того, что условие (равенство) выполнится...

Предлагаю третий, универсальный вариант. Вне зависимости от того, сколько пикселей будете прибавлять, вне зависимости от того того, какие будут размеры у надписей, будет работать всегда. Но код не маленький - зато практичный
C#
1
2
3
4
5
6
7
8
9
10
11
private int pxlSpeed = 5;
 
private void timer1_Tick(object sender, EventArgs e)
{
    if (labeltop.Location.Y >= labelrun.Location.Y - labeltop.Height)
        pxlSpeed *= -1;
    else
        if (labelbot.Location.Y <= labelrun.Location.Y + labelrun.Height)
            pxlSpeed *= -1;
    labelrun.Location = new Point(labelrun.Location.X, labelrun.Location.Y + pxlSpeed);
}
С Вас выбор лучшего ответа!
3
5 / 3 / 1
Регистрация: 31.03.2014
Сообщений: 200
13.03.2015, 17:38  [ТС]
BroDIK, получается чтоBroDIK,
спасибо, только
C#
1
labelrun.Location = new Point(labelrun.Location.X, labelrun.Location.Y + k);
нужно вынести за if
0
93 / 94 / 51
Регистрация: 19.06.2013
Сообщений: 323
13.03.2015, 17:40
Цитата Сообщение от newbiecoderr Посмотреть сообщение
нужно вынести за if
А оно и так у меня вынесено)) Фигурных скобок же нет))
0
5 / 3 / 1
Регистрация: 31.03.2014
Сообщений: 200
13.03.2015, 17:45  [ТС]
Цитата Сообщение от BroDIK Посмотреть сообщение
Фигурных скобок же нет))
Извините ошибся
Добавлено через 1 минуту
Я остановился на этом варианте

C#
1
2
3
4
5
6
7
public int k = 10;
private void timer1_Tick(object sender, EventArgs e)
{
    if ((labeltop.Location.Y >= labelrun.Location.Y - 17) || (labelbot.Location.Y <= labelrun.Location.Y + 17))
        k *= -1;
    labelrun.Location = new Point(labelrun.Location.X, labelrun.Location.Y + k);
}
Вроде работает с любым k.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.03.2015, 17:45
Помогаю со студенческими работами здесь

Перемещение PictureBox с ограничением области перемещения
Здравствуйте. Хотел написать код, для перемещения PictureBox в указанной области. Сам написать не смог. Нужно, в форме разместить 2 Пиктуре...

Error: attempt to define a local label before any non-local labels
если а^3&gt;b^2 то Если C*d=a/b то результат =a and b иначе результат=c иначе результат =c*d+b .model small .stack 100h .data a...

Перемещение static под другими
Как сделать так чтобы static объект (танк), который движется был ниже других статиков (картинка травы). Нужно чтобы танк проезжал под...

Выбор с ограничением в форме вида таблицы
Добрый день! Есть таблица Сотрудники, в которой имеются, ко всему прочему, поля Контрагент и Кабинет. Кабинет находится в связанной...

Как сделать, чтобы label сталкивался с другими?
Вот код на движущийся объект. Он должен сталкиваться с гранями label1, 2, 3 и 4 using System; using System.Collections.Generic; ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru