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

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

31.07.2012, 11:01. Показов 5562. Ответов 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
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 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
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru