194 / 13 / 3
Регистрация: 20.01.2015
Сообщений: 174
1

Реализовать в форме удобный выбор даты и времени

26.05.2015, 21:43. Показов 21989. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго всем времени! Хочу реализовать в форме удобный выбор даты и времени. Есть несколько идей.
1. дата:
- первый вариант сделать выпадающий список (comboBox) при нажатии на триугольник справа дожен выподать календарь
- или сделать выпадающий список в формате дд.мм.гг из 8 строк наначиная с текущей даты и далее плюс один без выходных дней.
2. время:
- выпадающий список должен формироваться циклон начиная от 8:00 до 17:00 c промежутком 30 минут указанном в текстБоксе

А если у кого есть нарабтки поинтереснее с удовольствием рассмотрю ваши варианты.
Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.05.2015, 21:43
Ответы с готовыми решениями:

Изменение представления даты и времени в удобный вид
Добрый день! Есть список с датами и временем такого вида: 20120307 065530 Подскажите,...

Отображение времени и даты на каждой форме приложения
Здравствуйте. Мне нужно отображать время и дату на каждой форме приложения. Сейчас делаю это...

Выбор даты из календаря без времени
У меня к Вам нубский вопрос... Как собственно из MonthCalender при щелчке по нужному дне в месяце в...

Организовать выбор даты и времени из текстового файла
Доброго времени суток всем. Уважаемые форумчане, есть задание на курсовую работу: Цифровые часы...

13
2080 / 1238 / 464
Регистрация: 20.12.2014
Сообщений: 3,237
26.05.2015, 23:40 2
Заходите в меню Tools/Additional Controls. Отмечаете Microsoft Date and Time Picker Control 6.0 (SP4). Контрол появлется в ToolBox. Оттуда перетаскиваете два контрола на форму. В свойствах одного из них ставите формат 2-dtpTime. Получаете то, что во вложенном изображении:
Миниатюры
Реализовать в форме удобный выбор даты и времени  
0
194 / 13 / 3
Регистрация: 20.01.2015
Сообщений: 174
27.05.2015, 01:18  [ТС] 3
Цитата Сообщение от aleks_des Посмотреть сообщение
выпадающий список в формате дд.мм.гг из 8 строк наначиная с текущей даты и далее плюс один без выходных дней.
Visual Basic
1
2
3
4
5
6
    Dim dDts
    dDts = Date
    Do While dDts < Date + 8 And dDts <> vbSunday And dDts <> vbSaturday
        dDts = dDts + 1
        ComboBox1.AddItem Format(dDts, "dd.mm.yy")
    Loop
частично сам сделал но как отсеять выходные дни пока не знаю

Добавлено через 12 минут
chumich,
Цитата Сообщение от chumich Посмотреть сообщение
Microsoft Date and Time Picker Control 6.0 (SP4)
не нашел у себя такого элемента
0
2080 / 1238 / 464
Регистрация: 20.12.2014
Сообщений: 3,237
27.05.2015, 01:34 4
Цитата Сообщение от aleks_des Посмотреть сообщение
не нашел у себя такого элемента
1) Возможно, в референсах что-то не подключено.
2) Проверьте в system32 или SysWow64 наличие файла mscomct2.ocx.
3) Посмотрите здесь:
Элемент Microsoft Date and Time Picker Control 6.0
0
194 / 13 / 3
Регистрация: 20.01.2015
Сообщений: 174
27.05.2015, 01:46  [ТС] 5
chumich, такой вариант не подходит, так как будет использоваться на разных компах на 2003 офисе и пользователями далекими от программирования.

В принципе меня мой вариант устроит с доработкой выходных дней. Вот лучше подскажите как к указанной дате например 8:00 прибавить полчаса, у меня что то ничего не выходит
0
11508 / 3794 / 681
Регистрация: 13.02.2009
Сообщений: 11,197
27.05.2015, 05:21 6
прибавлять можно только целое к-во.
Прибавляй минуты
Visual Basic
1
Debug.Print Now, DateAdd("n", 30, Now)
0
2080 / 1238 / 464
Регистрация: 20.12.2014
Сообщений: 3,237
27.05.2015, 09:45 7
Цитата Сообщение от aleks_des Посмотреть сообщение
как к указанной дате например 8:00 прибавить полчаса
К дате или ко времени? Вот маленький макрос, складывающий время:
Visual Basic
1
2
3
4
5
6
Dim a, b As String
a = InputBox("time1") 'вводите, например, 8:00
b = InputBox("time2") 'вводите 0:30
n = Format(CDate(a) + CDate(b), ShortTime)
MsgBox (n) 'выведет 08:30:00
End Sub
Добавлено через 3 минуты
Вот еще ссылка. Посмотрите, может что пригодится:
http://scriptcoding.ru/2013/11... y-vremeni/
1
5562 / 1368 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
27.05.2015, 17:58 8
Проект Night Ranger, думаю,
Цитата Сообщение от aleks_des Посмотреть сообщение
поинтереснее
Цитата Сообщение от Night Ranger Посмотреть сообщение
в архиве… календарь посвежее
(кнопка «Изменить даты»): Курсы валют и удобный интерфейс (готовое решение).
2
194 / 13 / 3
Регистрация: 20.01.2015
Сообщений: 174
28.05.2015, 12:37  [ТС] 9
Sasha_Smirnov, тоже не то, календарь как календарь стандартный, хотя я особо не вникал...
тем не менее моя идея пришлась мне по душе
Цитата Сообщение от aleks_des Посмотреть сообщение
выпадающий список в формате дд.мм.гг из 8 строк начиная с текущей даты и далее плюс один без выходных дней.
которую я доработал
исключив выходные дни
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Private Sub UserForm_Initialize()
 
    ComboBox1.AddItem Format(Date, "dd.mm.yy  ddd")
    Dim dDts
    dDts = Date
    Do While dDts < Date + 9
        dDts = dDts + 1
    Select Case WeekdayName(Weekday(dDts), , 1)
        Case "суббота"
            dDts = dDts + 2
        Case "воскресенье"
            dDts = dDts + 1
        Case Else
            dDts = dDts
        End Select
        ComboBox1.AddItem Format(dDts, "dd.mm.yy  ddd")
    Loop
 
End Sub
Осталось разобраться со временем, эта задачка будет посложнее. Буду изучать макрос chumich и приложенные материалы

Добавлено через 12 часов 33 минуты
Есть еще одна интересующая меня задача. В форме будет три одинаковых выпадающих списка с датами данный (выше указанный) код нужно будет продублировать в каждый из них. Как переписать этот код, как независимую функцию? Мой вариант был такой:

Функция:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Public Function TyreDate()
 
    Dim dDts
    dDts = Date
    Do While dDts < Date + 9
        dDts = dDts + 1
    Select Case WeekdayName(Weekday(dDts), , 1)
        Case "суббота"
            dDts = dDts + 2
        Case "воскресенье"
            dDts = dDts + 1
        Case Else
            dDts = dDts
        End Select
        TyreDate = Format(dDts, "dd.mm.yy  ddd")
    Loop
 
End Function
Ее применение:
Visual Basic
1
2
3
4
5
6
7
Private Sub UserForm_Initialize()
 
    ComboBox1.AddItem Format(Date, "dd.mm.yy ddd")
    ComboBox1.AddItem TyreDate
    Loop
    
End Sub
Но в этом случае отображается только последняя полученная функцией дата. Что у меня не так?
0
6081 / 1325 / 195
Регистрация: 12.12.2012
Сообщений: 1,023
28.05.2015, 14:01 10
Лучший ответ Сообщение было отмечено aleks_des как решение

Решение

Здравствуйте, aleks_des,
Вы многократно присваиваете различные значения одной и той же переменной (TyreDate), но она не в состоянии запомнить все эти значения и запоминает только последнее.

Я бы предложил вместо функции использовать процедуру:

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
25
Public Sub TyreDate(ByVal cbx As MSForms.ComboBox)
 
    cbx.AddItem Format(Date, "dd.mm.yy ddd")
    Dim dDts
    dDts = Date
    Do While dDts < Date + 9
        dDts = dDts + 1
    Select Case WeekdayName(Weekday(dDts), , 1)
        Case "суббота"
            dDts = dDts + 2
        Case "воскресенье"
            dDts = dDts + 1
        Case Else
            dDts = dDts
        End Select
        cbx.AddItem Format(dDts, "dd.mm.yy  ddd")
    Loop
 
End Sub
 
Private Sub UserForm_Initialize()
 
    TyreDate ComboBox1
    
End Sub
С уважением,
Аксима
1
194 / 13 / 3
Регистрация: 20.01.2015
Сообщений: 174
28.05.2015, 14:51  [ТС] 11
Перекрестно работает, Спасибо. Аксима, и не большая просьба расшифруйте вот эту строку для моего лучшего понимания процесса:
Цитата Сообщение от Аксима Посмотреть сообщение
Visual Basic
1
...(ByVal cbx As MSForms.ComboBox)
Добавлено через 40 минут
и почему
Visual Basic
1
TyreDate ComboBox1
а не
Visual Basic
1
TyreDate (ComboBox1)
0
6081 / 1325 / 195
Регистрация: 12.12.2012
Сообщений: 1,023
28.05.2015, 16:46 12
Лучший ответ Сообщение было отмечено aleks_des как решение

Решение

Строка
Цитата Сообщение от aleks_des Посмотреть сообщение
...(ByVal cbx As MSForms.ComboBox)
означает, что процедура получает в качестве аргумента ссылку на элемент управления типа ComboBox, с которым она производит необходимые операции, например добавляет новые строки в его список значений. Эта ссылка получает имя cbx, по которому с ней можно работать внутри процедуры.

Вызов процедуры осуществляется без скобок, чтобы подчеркнуть ее отличие от функции (функция возвращает значение, а процедура - нет):
Цитата Сообщение от aleks_des Посмотреть сообщение
TyreDate ComboBox1
Если же вы вызываете функцию, а не процедуру, то скобки нужны. В противном случае без них можно обойтись. Но если использовать скобки вам привычнее, то можно вызывать процедуру так:

Visual Basic
1
Call TyreDate(ComboBox1)
В этом случае для подчеркивания отличия процедуры от функции используется ключевое слово Call.

С уважением,
Аксима
1
194 / 13 / 3
Регистрация: 20.01.2015
Сообщений: 174
31.05.2015, 00:18  [ТС] 13
И на конец "Время" будет выглядеть так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
' Процедура формирующая выпадающие списки c интервалами времени
Public Sub ComBoxsTime(ByVal cbTime As MSForms.ComboBox)    ' применение: ComBoxsDate cb_Начало_время
' Входные данные:
' - cbDate - Выпадающий список дат
 
    Dim dWrTime, dTime, dEndTime
    dTime = CDate("0:30")       ' шаг времени приращения
    dWrTime = CDate("8:00")     ' начальное время приращения (время начала работ)
    cbTime.AddItem Format(dWrTime, "hh:nn")      ' начальное время приращения (отображение первой строкой)
    Do While dWrTime < CDate("17:00")    ' формирует выпадающий список времени
        dWrTime = dWrTime + dTime
        cbTime.AddItem Format(dWrTime, "hh:nn")
    Loop
    
End Sub
Кстати chumich,
Цитата Сообщение от chumich Посмотреть сообщение
Visual Basic
1
2
3
4
5
6
Dim a, b As String
a = InputBox("time1") 'вводите, например, 8:00
b = InputBox("time2") 'вводите 0:30
n = Format(CDate(a) + CDate(b), ShortTime)
MsgBox (n) 'выведет 08:30:00
End Sub
не работает, ругается на ShortTime. А с CDate() идея правильная, Спасибо.
0
2080 / 1238 / 464
Регистрация: 20.12.2014
Сообщений: 3,237
31.05.2015, 00:37 14
Цитата Сообщение от aleks_des Посмотреть сообщение
не работает, ругается на ShortTime. А с CDate() идея правильная, Спасибо.
Пожалуйста Но, у меня работает
Вложения
Тип файла: rar добавление времени.rar (12.5 Кб, 169 просмотров)
0
31.05.2015, 00:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.05.2015, 00:37
Помогаю со студенческими работами здесь

Календарь (выбор даты) в форме отправки с сайта
Други! Подскажите! есть скрипт PHP &lt;?php $name = $_POST; $email = $_POST; $phone =...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru