Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Работа с данными

Страница: 1 | 2 |

 

  Вопрос: Странное поведение DateTimePicker в VB 2008 Добавлено: 23.09.09 10:31  

Автор вопроса:  mrDenic
Не могу понять, почему мой код в VB 2008 дважды вызывает
Msgbox при выполнении условия. При этом в VBA(Excel)всё работает нормально.
код на VB 2008-Msgbox,( т.е. условие) выполняеться дважды

Public FirstRec As Date 'заданная дата,раньше которой пользователю не разрешено выбирать значение из календаря(берёться из базы)
Private Sub DateTimePicker1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DateTimePicker1.TextChanged
        If (DateTimePicker1.Value < FirstRec Or DateTimePicker1.Value > Now()) Then
            MsgBox("Данные за указанный период отсутствуют!!!" & Chr(13) & "Первая запись: " & FirstRec, vbInformation)
            DateTimePicker1.Value = Now()
        End If
 End Sub



код на VBA-работает как надо
Public FirstRec As Date 'заданная дата,раньше которой пользователю не разрешено выбирать значение из календаря(берёться из базы)
Private Sub DTPicker1_Change()

If (DTPicker1.Value < FirstRec Or DTPicker1.Value > Now()) Then
MsgBox "Данные за указанный период отсутствуют!!!" & Chr(13) & "Первая запись: " & FirstRec, vbInformation
DTPicker1.Value = Now()
End If
End Sub

Ответить

  Ответы Всего ответов: 18  

Номер ответа: 1
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #1 Добавлено: 23.09.09 14:01
Я так полагаю, потому что после вызова
DateTimePicker1.Value = Now()
снова происходит событие DateTimePicker1_TextChanged

Ответить

Номер ответа: 2
Автор ответа:
 mrDenic



Вопросов: 1
Ответов: 9
 Профиль | | #2 Добавлено: 23.09.09 14:54
То что строчка
DateTimePicker1.Value = Now()
ещё раз вызывает событие ";DateTimePicker1_TextChanged"-это совершенно верно, но ведь условие не выполняеться, т.к FirstRec берёться из базы и оно заведомо старше текущей даты(разница между датами порядка двух недель).

Ответить

Номер ответа: 3
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #3 Добавлено: 23.09.09 15:01
Ну посмотри в пошаговом выполнении в каком именно месте не так работает

Ответить

Номер ответа: 4
Автор ответа:
 mrDenic



Вопросов: 1
Ответов: 9
 Профиль | | #4 Добавлено: 23.09.09 15:07
перво наперво это и сделал
DateTimePicker1.Value = Now() отрабатывает нормально, потом после закрытия процедуры в самом календарике дата перекидываеться на ту, которую в форме выбрал рукамми, процедура происходит ещё раз и потом всё нормально

Ответить

Номер ответа: 5
Автор ответа:
 mrDenic



Вопросов: 1
Ответов: 9
 Профиль | | #5 Добавлено: 23.09.09 15:14
могу выложить архив, только незнаю куда удобнее.

Ответить

Номер ответа: 6
Автор ответа:
 Дмитрий Юпатов



Вопросов: 4
Ответов: 457
 Web-сайт: cargomaster.at.ua/
 Профиль | | #6
Добавлено: 23.09.09 15:41
хитро...
При пошаговой прогонке видно, что если мы выбираем неподходящую дату, то происходит так:
выполняется условие, отображается сообщение, затем изменяется текст. Изменение текста вызывает еще один проход процедуры. Тут все хорошо и логично, НО!
При повторном выполнении текст(свойство контрола) почему-то снова становится первоначальным... Ну и второй месидж получаем...
Чето мягкотелые напортачили...

Ответить

Номер ответа: 7
Автор ответа:
 mrDenic



Вопросов: 1
Ответов: 9
 Профиль | | #7 Добавлено: 23.09.09 15:50
Совершенно верно, потому и назвал "Странное поведение DateTimePicker в VB 2008". Парни не поверите, третий день бьюсь с этой ерундой, такая мелочь и столько времени убил!!!

Ответить

Номер ответа: 8
Автор ответа:
 Skywalker



ICQ: 300-70-6пятьЪ 

Вопросов: 62
Ответов: 545
 Web-сайт: iSkywalker.ru
 Профиль | | #8
Добавлено: 23.09.09 17:08
вы помойму сами себе проблемы создаете, что мешает установить свойства MinDate = FirstRec и MaxDate = Now() у DateTimePicker и нифига больше не проверять?

Ответить

Номер ответа: 9
Автор ответа:
 mrDenic



Вопросов: 1
Ответов: 9
 Профиль | | #9 Добавлено: 23.09.09 17:59
Разница между FirstRec и Now()составляет 14-17 дней, т.е. даже месяца не составляет.

Ответить

Номер ответа: 10
Автор ответа:
 Skywalker



ICQ: 300-70-6пятьЪ 

Вопросов: 62
Ответов: 545
 Web-сайт: iSkywalker.ru
 Профиль | | #10
Добавлено: 23.09.09 18:03
ну и что? да, календарь будет показывать весь месяц, но на даты, не входящие в заданный промежуток, нельзя будет ткнуть

Ответить

Номер ответа: 11
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #11 Добавлено: 23.09.09 21:31
имхо, работать с датой в TextChanged есть кривое решение.. я бы рекомендовал более тщательно изучить события этого контрола, и порядок их следования..

Ответить

Номер ответа: 12
Автор ответа:
 mrDenic



Вопросов: 1
Ответов: 9
 Профиль | | #12 Добавлено: 24.09.09 09:03
Skywalker
что мешает установить свойства MinDate = FirstRec и MaxDate = Now() у DateTimePicker

Да, возможно такое решение. Правда есть загвоздка, программа на VBA(Excel) работает уже несколько лет, а сейчас переноситься на VB, по этому не хотелось бы изменять HMI, чтоб юзвери не вопели.

работать с датой в TextChanged есть кривое решение

Возможно правильнее было-бы использовать ValueChanged, но мне нужно это событие только для проверки валидности заданной даты, да и в хелпе написано, что события Change в VB 2008 нет, но наиболее соответствует ему событие TextChanged.

Ответить

Номер ответа: 13
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #13 Добавлено: 24.09.09 13:45
Возможно правильнее было-бы использовать ValueChanged

именно так... это было бы самым верным..
но мне нужно это событие только для проверки валидности заданной даты

а для этого есть события Validating, Validated.. Они то как раз и предназначены для выполнения разного рода проверок..
Повторю еще раз.. надо внимательней изучать свойства и события контрола с которым работаешь..

Ответить

Номер ответа: 14
Автор ответа:
 mrDenic



Вопросов: 1
Ответов: 9
 Профиль | | #14 Добавлено: 25.09.09 12:46
Спасибо всем за советы, задача решена. Только вот всё же не понятно почему при повторном выполнении текст контрола становился первоночальным

Ответить

Номер ответа: 15
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #15 Добавлено: 25.09.09 15:43
Не задавай неудобных вопросов, смущаешь :)

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам