Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 04.07.2015
Сообщений: 53

Единый стиль оформления для форм

13.07.2015, 20:12. Показов 1955. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста возможно ли создать единый стиль оформления для всех техтбокс в форме не прописывая код для каждой из них?
то есть требуется при входе в каждый текстбокс менять цвет фона, а при выходе менять еще раз. Где это прописать один раз чтоб не писать внутри каждого события. Спаибо
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.07.2015, 20:12
Ответы с готовыми решениями:

Единый стиль для элементов коллекции в listbox
Как сделать единый стиль items для всей коллекции которая будет в listbox.

Единый стиль. кнопка Backspace и Del
1. Подскажите пожалуйста , как сделать окно ошибки одного стиля с главным окном. 2. Я сделал так, чтобы в форму вводились только цифры. ...

Стиль оформления
Здравствуйте. Может подскажите, есть ли какой то мануал по стилю написания кода в PL/SQL. Например, какая часть текста пишется верхним...

17
2053 / 483 / 133
Регистрация: 13.11.2008
Сообщений: 922
13.07.2015, 21:06
Надо через модули классов это делать. Наберите в Яндексе: Работа с модулями классов
0
Эксперт NIX
3305 / 933 / 201
Регистрация: 14.01.2013
Сообщений: 4,769
14.07.2015, 07:04
А офис у Вас какой?
0
0 / 0 / 0
Регистрация: 04.07.2015
Сообщений: 53
14.07.2015, 20:30  [ТС]
2013
0
Эксперт NIX
3305 / 933 / 201
Регистрация: 14.01.2013
Сообщений: 4,769
16.07.2015, 15:44
Если в 2013 есть событие Enter у контрола TextBox, то да, можно использовать. Добавляете модуль класса, называете его, к примеру, TBControl. У него в коде пишите:

Visual Basic
1
2
3
4
5
6
7
8
9
Option Explicit
 
Public WithEvents TBC As MSForms.TextBox
 
Private Sub TBC_Enter(...)
  TBC.BackColor = RGB(255, 0, 0)
End Sub
 
...
В любом модуле объявляете массив своих текстбоксов. Что-то типа tbi(7) As New TBControl

В форме, в процедуре инициализации, добавляете текстбоксы на форму и оформляете их:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  For i = 0 To 6
    Set tbi(i).TBC = Info.Controls.Add("Forms.TextBox.1", a(i))
  Next i
  With tbi(0).TBC 'Первый текстбокс
    .MaxLength = 200
    .TextAlign = fmTextAlignLeft
    .BorderStyle = fmBorderStyleSingle
    .BorderColor = RGB(171, 171, 171)
    .Font.Size = 9
    .Font.Bold = True
    .Top = 28
    .Left = 60
    .Width = 444
    .Height = 16
    .SelectionMargin = False
  End With
 
...
Вот как-то так.
1
0 / 0 / 0
Регистрация: 04.07.2015
Сообщений: 53
21.07.2015, 02:32  [ТС]
Цитата Сообщение от Kubuntovod Посмотреть сообщение
Private Sub TBC_Enter(...)
это значит что процедура будет приминима для всех событий Enter?
0
Эксперт NIX
3305 / 933 / 201
Регистрация: 14.01.2013
Сообщений: 4,769
21.07.2015, 09:18
Цитата Сообщение от VeX Посмотреть сообщение
это значит что процедура будет приминима для всех событий Enter?
Да. Для контролов, созданных на основе этого класса. К сожалению, у меня офис 2003, а в нём нет такого события у контрола TextBox. Поэтому, в примере многоточие.
1
0 / 0 / 0
Регистрация: 04.07.2015
Сообщений: 53
21.07.2015, 15:16  [ТС]
Блин че-то ниче не работает
Мне не нужно создавать текстбоксы - они уже созданы
Я хочу избавить себя от записи в каждом событии прописывать изменение цвета.
Что мне прописать в модуле классов, чтоб автоматом события применяли их


Что написать в модуле формы, чтоб работало для всех событий _Enter и _Exit?

Модуль класса:
Code
1
2
3
4
5
6
7
8
9
10
11
Option Explicit
 
Public WithEvents Свойства_поля As MSForms.TextBox
 
Sub Свойства_поля_Enter()
    Свойства_поля.BackColor = &H80000018
End Sub
 
Sub Свойства_поля_Exit()
    Свойства_поля.BackColor = &H80000005
End Sub
0
2053 / 483 / 133
Регистрация: 13.11.2008
Сообщений: 922
21.07.2015, 15:40
В двух словах сложно пояснять. Я уже предлагал Вам поискать. Здесь нельзя ссылки на сторонние ресурсы выкладывать - могу в личку скинуть.
Сама ссылка(да простят меня модераторы): Работа с модулями классов
Там я приводил пример и с созданием новых TextBox-ов и с использованием уже существующих на форме. С подробным описанием что за что отвечает.
0
0 / 0 / 0
Регистрация: 04.07.2015
Сообщений: 53
22.07.2015, 03:16  [ТС]
так это ваш пример я его видел но голова че-то совсем не та что 20 лет назад. да и освоить программирование за неделю не легко. в голове полный бардак

Добавлено через 4 часа 8 минут
Спустя 2 часа вроде разобрался что к чему, не совсем понятно что такое Me.Control? Это объект текстбокс?
Если у каждого объекта уникальное имя их надо каждый отдельно прописывать?

Code
1
2
3
Set aoTxtBxes(1).oTxtBx = Me.Controls(Номер_договора)
Set aoTxtBxes(2).oTxtBx = Me.Controls(Дата заключения)
Set aoTxtBxes(3).oTxtBx = Me.Controls(и_тд)
И можно ли использовать глобальные переменные с такими же именами как текстбоксы? Чем это грозит?
0
0 / 0 / 0
Регистрация: 04.07.2015
Сообщений: 53
22.07.2015, 03:45  [ТС]
Че то не хочет работать - пишет несовпадение типов
может гляньте что не так?
Вложения
Тип файла: zip VBAforma.zip (35.6 Кб, 2 просмотров)
0
Эксперт NIX
3305 / 933 / 201
Регистрация: 14.01.2013
Сообщений: 4,769
22.07.2015, 07:06
Имена в кавычки возьмите.

Добавлено через 11 минут
И пункт "Менеджер" у Вас является типом ComboBox, а Вы его туда же впяливаете, как TextBox. Внимательнее надо
1
2053 / 483 / 133
Регистрация: 13.11.2008
Сообщений: 922
22.07.2015, 11:49
Тут как бы нечего больше советовать. Там конкретный пример для Вашего случая так же описан.
Цитата Сообщение от VeX Посмотреть сообщение
И можно ли использовать глобальные переменные с такими же именами как текстбоксы?
Я бы не советовал. Это дурной тон. Внутри формы обращение будет все равно к объекту самой формы, т.к. у них приоритет. В других модулях это не помешает, но существенно может запутать логику кода. Лучше сразу старайтесь выстраивать логику так, чтобы не пришлось давать одинаковые имена модулям, процедурам, объектам.
0
0 / 0 / 0
Регистрация: 04.07.2015
Сообщений: 53
22.07.2015, 23:29  [ТС]
Цитата Сообщение от Kubuntovod Посмотреть сообщение
И пункт "Менеджер" у Вас является типом ComboBox, а Вы его туда же впяливаете, как TextBox. Внимательнее надо
Если у меня единые свойства что для КомбоБокс что для ТекстБокс как мне это записать? Неужели создавать отдельный класс для КомбоБокс?
0
2053 / 483 / 133
Регистрация: 13.11.2008
Сообщений: 922
22.07.2015, 23:43
Не понял вообще смысла написанного. В классе создаете события. Там не может быть двойственности. Либо Вы классом это событие для контрола обрабатываете, либо внутри формы.
0
Эксперт NIX
3305 / 933 / 201
Регистрация: 14.01.2013
Сообщений: 4,769
23.07.2015, 06:45
Цитата Сообщение от VeX Посмотреть сообщение
Если у меня единые свойства что для КомбоБокс что для ТекстБокс как мне это записать?
Вот смотрите, Вы пишите:

Public WithEvents Свойства_полей As MSForms.TextBox

А затем туда впихиваете невпихуемое:

Свойства_полей = Me.Controls("Менеджер")

Но поле "Менеджер" то у Вас совсем другого типа! Т.е. Вы пишите, фактически, объект "круг" равен объекту "квадрат". VBA Вам закономерно отвечает про несоответствие типов.

Цитата Сообщение от VeX Посмотреть сообщение
Неужели создавать отдельный класс для КомбоБокс?
Если у Вас всего один комбобокс на форме, то можно в форме код и прописать.

Добавлено через 1 минуту
Цитата Сообщение от The_Prist Посмотреть сообщение
Не понял вообще смысла написанного.
Файлик скачайте и сразу поймёте
0
Эксперт NIX
3305 / 933 / 201
Регистрация: 14.01.2013
Сообщений: 4,769
23.07.2015, 07:57
Лучший ответ Сообщение было отмечено VeX как решение

Решение

VeX, в свете последних данных о событии "Enter" у TextBox-ов, придётся Вам вернуться к тому, с чего Вы начинали С прописывания события у каждого контрола. Но можно значительно сократить код, если использовать единую процедуру. Примерно так:
Вложения
Тип файла: zip VBAforma1.zip (15.1 Кб, 8 просмотров)
1
0 / 0 / 0
Регистрация: 04.07.2015
Сообщений: 53
23.07.2015, 19:18  [ТС]
Ура заработало

Добавлено через 1 час 45 минут
А запись такого типа как реализовать? и возможно ли это?
то есть требуется автоматически брать имя активного текстбокса и создавать аналогичное событие

Code
1
Private Sub (Me.ActiveControl.Name)&_Enter()
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.07.2015, 19:18
Помогаю со студенческими работами здесь

Стиль оформления Windows XP
Как сделать, чтобы интерфейс создаваемого приложения в VB.net был в стиле Windows XP

Стиль оформления - сортировать ли по алфавиту?
Я начинающий. Посмотрел Java Code Conventions, ответа не нашел. Пусть перед глазами текст программы. В программе идут - разбитые...

Можно ли изменить в Qt стиль оформления приложения ?
Знаю что есть стандартные fusion, xp, vista, Ну и другие, А можно ли установить свои? Например в Delphi я помн можно было меня стиль...

Стиль оформления литературы ГОСТ 7:1:2006
Нужен файлик xls для оформления литературы по ГОСТ 7:1:2006. Должно быть так: Рильніков Б. С. Кафедра інженерного матеріалознавства...

Плохой ли такой стиль оформления имени переменной/метода?
// Имя переменной. int point_X1; // Имя метода. static void Input_Point_X1() { } Вот, думаю так поди правильнее?: ...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
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 и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru