Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.59/27: Рейтинг темы: голосов - 27, средняя оценка - 4.59
3 / 3 / 0
Регистрация: 20.07.2012
Сообщений: 50

Как наложить на форму количество лейблов, соответствующих количеству дней в месяце?

31.07.2012, 11:01. Показов 5584. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Продолжаю писать прогу "график работы" и возник вопрос...
Как не вручную, а программно положить на форму лейблов, число которых будет соответствовать числу дней в месяце?
Предыдущий вариант моей программы использовал заготовленную форму с 31 лейблом, что не очень удобно, так как в разных месяцах, разное количество дней(что сбивает с понтолыги юзера))...

P.S. как программно убирать с формы её элементы(лейблы, текстбоксы, кнопки и т.д...) ?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.07.2012, 11:01
Ответы с готовыми решениями:

Обращение к количеству дней в месяце
Добрый день, нужно сделать подобие Exсel-ливского автозаполнения. Есть какой-нибудь способ обращения к календарю и узнать сколько дней в...

Множества.Месяц 1..30 Описать функцию число дней (m), определяющую количество дней в месяце (n) не високосного года.
Месяц 1..30 Описать функцию число дней (m), определяющую количество дней в месяце (n) не високосного года. прошу Вас программисты о помощи!

Как обуздать дату? Вычислить количество дней в месяце?
Я создаю <select> тоесть список дней (1, 2....до 30). Вопрос так как в каждем месяце количество дне меняется, то как можно сделать так...

22
369 / 78 / 6
Регистрация: 23.05.2012
Сообщений: 232
31.07.2012, 12:03
Ну вот например для текстбокса
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Dim ctlText As VB.TextBox
 
Private Sub Command1_Click()
    Set ctlText = Controls.Add("VB.TextBox", "tb1", Form1) ' создаем текстбокс
    ctlText.Move 100, 100, 2500, 100                       ' изменяем размеры
    ctlText.Visible = True                                 ' делаем видимым
    
End Sub
 
Private Sub Command2_Click()
    Controls.Remove "tb1"                   'удалить контрол
End Sub
Добавлено через 21 минуту
P.S. программно убрать можно только программно же созданные контролы.
Попытка удалить контрол созданный в конструкторе приведет к еррору
P.P.S. - а зачем вам изменять количество лейблов? Не проще ли делать некоторые из них скрытыми согласно количеству дней?
1
3 / 3 / 0
Регистрация: 20.07.2012
Сообщений: 50
31.07.2012, 12:03  [ТС]
Это не совсем то, что я просил, но тем не менее похоже на правду))
Только выводится всего один текстбокс, а не количество соответствующее количеству дней в месяце..
А можно расписать подробно строку №4(каждое слово в ней) ?
Как сделать заготовленные на форме лейблы скрытыми?
И как тоже самое сделать с лейблами?))
0
 Аватар для Апострофф
9908 / 3924 / 742
Регистрация: 11.10.2011
Сообщений: 5,904
31.07.2012, 12:22
Цитата Сообщение от vfalex Посмотреть сообщение
Как сделать заготовленные на форме лейблы скрытыми?
Visual Basic
1
Label1.Visible = False
1
369 / 78 / 6
Регистрация: 23.05.2012
Сообщений: 232
31.07.2012, 12:34
пример с лабелем

Visual Basic
1
2
3
4
5
6
Private Sub Command3_Click()
    Set ctlLabel = Controls.Add("VB.Label", "Label1", Form1) ' создаем лейбл
    ctlLabel.Move 100, 100, 700, 300                         ' изменяем размеры и местоположение
    ctlLabel.Caption = "Лабель1"
    ctlLabel.Visible = True                                  ' делаем видимым
End Sub
по строке 4:
Set - присваивает переменной ссылку на объект
Controls.Add - добавляет новый элемент управления в форму
его параметры:
VB.Label - тип элемента управления
Label1 - имя элемента управления
Form1 - где размещать

Далее вы можете делать с элементом все что хотите в рамках его свойств.

P.S. - ctlLabel объявить не забудьте
1
3 / 3 / 0
Регистрация: 20.07.2012
Сообщений: 50
31.07.2012, 12:35  [ТС]
А как узнать количество дней в месяце?))
Вот текущая дата Day(Date)
А нет ли чего-то типа LastDay(Date) ? :-)
0
 Аватар для Апострофф
9908 / 3924 / 742
Регистрация: 11.10.2011
Сообщений: 5,904
31.07.2012, 12:39
Цитата Сообщение от vfalex Посмотреть сообщение
А как узнать количество дней в месяце?))
Visual Basic
1
msgbox DateSerial(Year(Date), Month(Date) + 1, 1) - DateSerial(Year(Date), Month(Date), 1)
0
3 / 3 / 0
Регистрация: 20.07.2012
Сообщений: 50
31.07.2012, 12:45  [ТС]
Цитата Сообщение от Апострофф Посмотреть сообщение
Visual Basic
1
msgbox DateSerial(Year(Date), Month(Date) + 1, 1) - DateSerial(Year(Date), Month(Date), 1)
Не понял как это работает и к чему привязать...
При запуске этой строки, прога выдает ошибку...((
0
369 / 78 / 6
Регистрация: 23.05.2012
Сообщений: 232
31.07.2012, 12:49
Цитата Сообщение от vfalex Посмотреть сообщение
При запуске этой строки, прога выдает ошибку...((

Не по теме:

у-у-у.... батенька! Вам бы сначала наверно стоило последовать завету Владимира Ильича :)
Который говорил про учиться, учиться и еще раз учиться :)


в процедуру клика кнопки ее запихайте хотя бы
0
 Аватар для Апострофф
9908 / 3924 / 742
Регистрация: 11.10.2011
Сообщений: 5,904
31.07.2012, 12:51
Visual Basic
1
к_во_дней_в_текущем_месяце=DateSerial(Year(Date), Month(Date) + 1, 1) - DateSerial(Year(Date), Month(Date), 1) ' а-ля Ципихович:D
Вставь это туда, где определяешь к-во дней в месяце
1
3 / 3 / 0
Регистрация: 20.07.2012
Сообщений: 50
31.07.2012, 13:00  [ТС]
Цитата Сообщение от skol13 Посмотреть сообщение

Не по теме:

у-у-у.... батенька! Вам бы сначала наверно стоило последовать завету Владимира Ильича :)
Который говорил про учиться, учиться и еще раз учиться :)


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

Добавлено через 5 минут
Цитата Сообщение от Апострофф Посмотреть сообщение
Visual Basic
1
к_во_дней_в_текущем_месяце=DateSerial(Year(Date), Month(Date) + 1, 1) - DateSerial(Year(Date), Month(Date), 1) ' а-ля Ципихович:D
Вставь это туда, где определяешь к-во дней в месяце
Ура)
Работает))
Осталось разобраться по какому принципу))
Всем спасибо))
0
369 / 78 / 6
Регистрация: 23.05.2012
Сообщений: 232
31.07.2012, 13:21
вот вам еще примерчик создания лабелей в цикле по количеству дней:
и в цикле же удаление с проверкой существования объекта
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Option Explicit
Dim i, days
 
Private Sub Command1_Click()
    days = DateSerial(Year(Date), Month(Date) + 1, 1) - DateSerial(Year(Date), Month(Date), 1)
    
    For i = 1 To days
        Controls.Add "VB.Label", "Label" & i, Form1                               ' создаем лейбл
        Controls("Label" & i).Move 100, (100 + 300) * i, 700, 300                 ' изменяем размеры и местоположение
        Controls("Label" & i).Caption = "Лабель" & i
        Controls("Label" & i).Visible = True
    Next i
 
 
End Sub
 
Private Sub Command2_Click()
    On Error Resume Next
    For i = 1 To 100
        If Not Controls("Label" & i) Is Nothing Then
           Controls.Remove "Label" & i
        End If
    Next i
End Sub
2
 Аватар для Апострофф
9908 / 3924 / 742
Регистрация: 11.10.2011
Сообщений: 5,904
31.07.2012, 13:22
Но можно и динамически добавить нужные элементы в предварительно созданный массив.
Например, на форме Label1 с Index=0 (задать в свойствах контрола)
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub Form_Load()
Dim i%
Label1(0).Visible = False
For i = 1 To DateSerial(Year(Date), Month(Date) + 1, 1) - DateSerial(Year(Date), Month(Date), 1)
  Load Label1(i)
    With Label1(i)
    .Visible = True
    .BorderStyle = 1
    .Caption = i
    .Width = 390
    .Height = 390
    .Top = 390
    .Left = i * 400
   End With
Next i
End Sub
Преимущество перед вариантом от skol13 в том, что не надо изобретать события для добавленных объектов
2
369 / 78 / 6
Регистрация: 23.05.2012
Сообщений: 232
31.07.2012, 13:29
Цитата Сообщение от Апострофф Посмотреть сообщение
Преимущество перед вариантом от skol13 в том, что не надо изобретать события для добавленных объектов
ну особого то преимущества как бы и нет - все равно все в цикле делается
а вот забить ему мозг массивом контролов когда он еще в азах не разобрался - это реально

Добавлено через 4 минуты
ну и моим способом можно добавить на форму активХ-компоненты, не входящие в стандартный комплект VB.
Правда сложнее, чем стандартные
0
 Аватар для Апострофф
9908 / 3924 / 742
Регистрация: 11.10.2011
Сообщений: 5,904
31.07.2012, 13:43
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от vfalex Посмотреть сообщение
Осталось разобраться по какому принципу))
А это совсем просто!
Из первого числа следующего месяца вычитаем первое число текущего.
Получаем разницу в днях

Цитата Сообщение от skol13 Посмотреть сообщение
ну особого то преимущества как бы и нет - все равно все в цикле делается
А вот и есть!
Для твоего Label30 нет ещё события _Click (и не скоро будет), а у моего Label1(30) уже есть
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38192 / 21125 / 4309
Регистрация: 12.02.2012
Сообщений: 34,732
Записей в блоге: 14
01.08.2012, 10:07
Мне кажется, чем запоминать все премудрости действия с датами, проще поступить так:

Visual Basic
1
2
3
4
5
6
7
8
9
Function Ndays(Y as integer, m as integer) as integer
 
            ND=Array(0,31,28,31,30,31,30,31,31,30,31,30,31)
 
            Ndays=Cint(ND(m))
 
            if (Y mod 4)=0 then Ndays=29
               
End Function
Замечание для педантов: я в курсе, что годы, кратные 4 и 100 невисокосные... Но не думаю, что программа доживет до следующей "точки актуальности"...
1
01.08.2012, 10:32

Не по теме:

Цитата Сообщение от Catstail Посмотреть сообщение
Но не думаю, что программа доживет до следующей "точки актуальности"...
надо надеяться на лучшее :)

0
 Аватар для Апострофф
9908 / 3924 / 742
Регистрация: 11.10.2011
Сообщений: 5,904
01.08.2012, 10:40
Цитата Сообщение от Catstail Посмотреть сообщение
Visual Basic
1
if (Y mod 4)=0 then Ndays=29
Все месяцы в високосный год по 29 дней?
Так правильнее, кажется?
Visual Basic
1
if (Y mod 4)=0 and m=2 then Ndays=29
А для педантов и оптимистов -
Visual Basic
1
if (Y mod 4)=0 and ((y mod 100)<>0 or (y mod 400)=0) and m=2 then Ndays=29
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38192 / 21125 / 4309
Регистрация: 12.02.2012
Сообщений: 34,732
Записей в блоге: 14
01.08.2012, 12:27
Вот, сделал календарь на лэйблах. Может, пригодится (и педантам и разгильдяям...). VB-проект прилагаю:
Изображения
 
Вложения
Тип файла: zip t008.zip (8.7 Кб, 18 просмотров)
1
 Аватар для Апострофф
9908 / 3924 / 742
Регистрация: 11.10.2011
Сообщений: 5,904
01.08.2012, 13:28
Что то здесь не то
Изображения
 
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.08.2012, 13:28
Помогаю со студенческими работами здесь

Как учесть в программе, что в месяце может быть разное количество дней?
Как учесть в программе что может быть и 28 и 29 и 30 и 31 день в месяце. Помогите пожалуйста #include &lt;iostream&gt; ...

Напечатать на экране "календарь" на один месяц (по дню недели 1-го числа и количеству дней в месяце)
Cоставить алгоритм и программу, которая печатает на экране «календарь» на один месяц, если известно, сколько дней в месяце и с какого дня...

Количество дней в месяце
Есть программа, но работает она не очень точно, суть в том, что она должна отсчитать ровно год (минуты, часы, дни, месяцы), проблема в том,...

Количество дней в месяце
Таск 1 Пользователь вводит номер месяца . Надо вывести количество дней в этом месяце Пример 1 - 31 день Таск 2 ...

Количество дней в месяце
Вывести количество дней в текущем месяце можно так: perl -MTime::Piece -E '$t=localtime;say $t-&gt;month_last_day' А как то же сделать...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
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 и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru