Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Rphoenix
-52 / 4 / 0
Регистрация: 07.03.2014
Сообщений: 232
1

Скрыть все кнопки, кроме некоторых

22.02.2018, 23:01. Просмотров 792. Ответов 8
Метки нет (Все метки)

Здравствуйте!
Самостоятельно изучаю делфи. Вот такой вопрос. Допустим, у меня на форме 100 кнопок (N0..N99). Мне нужно их скрыть, кроме некоторых 5 (N98,N7,N3,N85,N12), т.е. form1.N26.Visible:=False - например.

Получается, мне нужен цикл for с 0 по 99. Где if [i] in (3,7...98), то form1.N26.Visible:=true, else form1.N[i].Visible:=False.
Правильно? или как лучше сделать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.02.2018, 23:01
Ответы с готовыми решениями:

Запрет ввода всех букв и цифр кроме некоторых в StringGrid
Допустим есть 4 слова: красный, синий, зелёный, белый. От каждого слова мне надо отсечь по первой...

скрыть кнопки
Можно ли скрыть кнопки в OpenDialog,чтобы пользователь по ошибке не выбрал другую папку, путь в...

Прозрачная панель ,скрыть кнопки
Добрый вечер друзья! Последние два года находил ответы на все вопросы но тут тупик. Подскажите...

Скрыть кнопки при определённом RadioButton
Нужна ваша помощь. Есть 2 RadioButton. При нажатии на RadioButton1 должны пропасть кнопки button6...

Горячие клавиши: скрыть кнопки на форме
Как с помощью горячих клавиш сделать так, чтобы скрывались другие кнопки на форме?

8
Joey
Форумчанин
831 / 552 / 219
Регистрация: 05.05.2015
Сообщений: 3,199
Записей в блоге: 1
22.02.2018, 23:30 2
Цитата Сообщение от Rphoenix Посмотреть сообщение
Получается, мне нужен цикл for с 0 по 99.
Чтобы в цикле работать с компонентами на форме придется использовать немного более сложную конструкцию: перебирать ВСЕ компоненты, проверять, кнопка ли это и если кнопка, то совершать нужные действия. Можно просто скрыть все, затем просто снова сделать видимыми нужные
Delphi
1
2
3
4
5
6
7
8
for i := 0 to ControlCount - 1 do
    if (Controls[i] is TButton) // проверка, кнопка ли это
    then (Controls[i] as TButton).Visible := false;
N3.Visible := true;
N7.Visible := true;
N12.Visible := true;
N85.Visible := true;
N98.Visible := true;
0
SkyLion27
62 / 62 / 21
Регистрация: 25.06.2017
Сообщений: 105
22.02.2018, 23:31 3
Цитата Сообщение от Rphoenix Посмотреть сообщение
Самостоятельно изучаю делфи.
Скинь исходник.
1
Joey
Форумчанин
831 / 552 / 219
Регистрация: 05.05.2015
Сообщений: 3,199
Записей в блоге: 1
22.02.2018, 23:32 4
Если код пишется внутри обработчика какого-то события формы, то Form1. перед именем объекта писать не надо
0
northener
пофигист широкого профиля
3422 / 2322 / 630
Регистрация: 15.07.2013
Сообщений: 13,735
23.02.2018, 02:44 5
Rphoenix, прямое обращение к компоненту/контролу по имени в Дельфи не предусмотрено. Да и не только в Дельфи. Ибо имя компонента/контрола нужно только для работы в дизайнере формы. То что имена компонентов/контролов созданных в дизайнере совпадают с именами переменных в коде программы содержащих ссылки на эти компоненты/контролы - это просто для простоты реализации RAD.
Не знаю вашу задачу. Но первым образом посоветую вам создать массив кнопок.

Добавлено через 2 минуты

Не по теме:

Цитата Сообщение от Joey Посмотреть сообщение
Если код пишется внутри обработчика какого-то события формы, то Form1. перед именем объекта писать не надо
Под страхом обрубания рук. Следует добавить! :)

0
D1973
Модератор
3467 / 2489 / 1227
Регистрация: 21.01.2014
Сообщений: 10,361
Записей в блоге: 3
Завершенные тесты: 1
23.02.2018, 08:42 6
Лучший ответ Сообщение было отмечено Joey как решение

Решение

Rphoenix, установите для тех кнопок, которые НЕ должны скрываться, свойство Tag больше 0 (хоть 1)
Тогда код, предложенный Joey, будет выглядеть так:
Delphi
1
2
3
4
var i: integer;
...
 for i := 0 to ControlCount - 1 do
  if (Controls[i] is TButton) then TButton(Controls[i]).Visible := TButton(Controls[i]).Tag > 0;
Добавлено через 1 минуту
Цитата Сообщение от SkyLion27 Посмотреть сообщение
Скинь исходник.
Исходник чего?
1
Rphoenix
-52 / 4 / 0
Регистрация: 07.03.2014
Сообщений: 232
23.02.2018, 09:36  [ТС] 7
Спасибо, но по TMenuItem не хочет работать
0
Joey
Форумчанин
831 / 552 / 219
Регистрация: 05.05.2015
Сообщений: 3,199
Записей в блоге: 1
23.02.2018, 11:25 8
Rphoenix, когда форумчанин пишет "не работает", он обязан выложить код, который "не работает", иначе нам придется догадываться за Вас

Добавлено через 15 секунд
Какой код не работает и какую ошибку выдает?
0
D1973
Модератор
3467 / 2489 / 1227
Регистрация: 21.01.2014
Сообщений: 10,361
Записей в блоге: 3
Завершенные тесты: 1
23.02.2018, 12:17 9
Лучший ответ Сообщение было отмечено Rphoenix как решение

Решение

не говорите ерунды, а код показывайте, что Вы там намутили...
И, кстати, этот код может не сработать, если все Ваши 100500 кнопок находятся в каком-нибудь контейнере типа TPanel, TGroupBox и т.д. В этом случае все решается явным указанием контейнера...
Delphi
1
2
3
with Panel1 do
 for i := 0 to ControlCount - 1 do
  if (Controls[i] is TButton) then TButton(Controls[i]).Visible := TButton(Controls[i]).Tag > 0;
Добавлено через 46 минут
Цитата Сообщение от Rphoenix Посмотреть сообщение
по TMenuItem не хочет работать
Вот сейчас дошло, наверное... Вам надо скрывать не кнопки, а пункты меню? Тогда это естественно работать не будет, т.к. TMenuItem не является потомком TControl...
(типичный XYZ)
вот пример для пунктов меню (принцип тот же - нескрываемые пункты имеют Tag > 0)
Delphi
1
2
3
for i := 0 to ComponentCount - 1 do
   if Components[i] is TMenuItem
    then TMenuItem(Components[i]).Visible := TMenuItem(Components[i]).Tag > 0;
1
23.02.2018, 12:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.02.2018, 12:17

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

При нажатии кнопки полное удаление значений и строк кроме фиксед строки
Как оформить код? При нажатии на кнопку должен полностью очиститься стринг грид от значений и...

Делаю игру "Сапер", Все сделано, вроде все правильно работает, кроме таймера
Не знаю как остановить таймер, когда поле уже все в минах, и еще на каждом уровне время...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru