Null-able DateTimePicker
От: AlexGin Беларусь  
Дата: 26.09.16 07:22
Оценка:
Доброе время суток, уважаемые коллеги!

Имеется проект (.NET, C#, WindowsForms), где на формах необходимы контролы ввода даты.
Однако, бывают ситуации, когда дата не предоставлена пользователем (это нормальная ситуация, оговоренная в ТЗ по данному проекту).

Применение стандартного DateTimePicker:
https://msdn.microsoft.com/en-us/library/system.windows.forms.datetimepicker(v=vs.110).aspx
проблемы не решает.

Требуется: чтобы у пользователя имелась возможность как ввести пустое поле, так и очистить поле с датой.
Применение следующего метода, описанного на просторах и-нета:
    dtp.Format = DateTimePickerFormat.Custom;
    dtp.Text = string.Empty;
    dtp.CustomFormat = " ";

Помогает только очистить поле ввода в контроле dtp, однако ввести данные после этого пользователь уже не может
Попытка подписаться на событие DropDown — и там сделать следующие действия:
private void OnDropDown(object sender, EventArgs e)
{
    DateTimePicker dtp = (DateTimePicker)sender;
    dtp.Format = DateTimePickerFormat.Short;
}

не позволяет выбрать требуемую дату с первого раза.

Вывод:
Очень желательно, либо найти альтернативу DateTimePicker, либо советы по доработке стандартного DateTimePicker.
Может быть, кто-нибудь сталкивался с подобной проблемой, и подскажет решение?

Заранее благодарен за любые советы!

P.S. Очень желательнло применение свободного (free) компонента.
Отредактировано 26.09.2016 7:27 AlexGin . Предыдущая версия .
Re: Null-able DateTimePicker
От: AlexGin Беларусь  
Дата: 26.09.16 08:04
Оценка:
Кстати — вот один из вариантов (по доработке существующего DateTimePicker):
http://www.codeproject.com/Articles/5428/Nullable-DateTimePicker
Re: Null-able DateTimePicker
От: VladCore  
Дата: 26.09.16 18:47
Оценка:
Здравствуйте, AlexGin, Вы писали:

AG>Заранее благодарен за любые советы!


AG>P.S. Очень желательнло применение свободного (free) компонента.


Голый WinForms как и WPF в реальной жизни мало на что годится.

DevExpress порекомендую. ComponentOne и Infragistic не рекомендую.

Сам попросил совета


P.S. Вспомнил, что базовые Editor-ы у DevExpress бесплатные.
Отредактировано 26.09.2016 18:52 VladCore . Предыдущая версия .
Re: Null-able DateTimePicker
От: Vladek Россия Github
Дата: 27.09.16 03:52
Оценка: +1 -1
Здравствуйте, AlexGin, Вы писали:

AG>Доброе время суток, уважаемые коллеги!


AG>Имеется проект (.NET, C#, WindowsForms), где на формах необходимы контролы ввода даты.

AG>Однако, бывают ситуации, когда дата не предоставлена пользователем (это нормальная ситуация, оговоренная в ТЗ по данному проекту).

AG>Применение стандартного DateTimePicker:

AG>https://msdn.microsoft.com/en-us/library/system.windows.forms.datetimepicker(v=vs.110).aspx
AG>проблемы не решает.

AG>Требуется: чтобы у пользователя имелась возможность как ввести пустое поле, так и очистить поле с датой.


Сделай рядом чекбокс "Дата не указана", который будет блокировать DateTimePicker. И всё! Заказчика, скорее всего, устроит — а если нет, то хотя бы будет рабочий вариант "на время". На ковыряние в кишках винформсов можно убить всё время, а его обычно не хватает.
Re[2]: Null-able DateTimePicker
От: amironov79  
Дата: 27.09.16 05:13
Оценка: 12 (2)
Здравствуйте, AlexGin, Вы писали:

AG>Кстати — вот один из вариантов (по доработке существующего DateTimePicker):

AG>http://www.codeproject.com/Articles/5428/Nullable-DateTimePicker

Делал похожим образом, только вместо MinValue и масок формата использовал ShowCheckBox и DateTime?.

        public DbDateTimePicker()
        {
            this.ShowCheckBox = true;
        }

        public new DateTime? Value
        {
            get
            {
                if (this.Checked == false) {
                    return null;
                }
                
                return base.Value;
            }

            set
            {
                if (value == null) {
                    this.Checked = false;
                }
                else {
                    this.Checked = true;
                    base.Value = value.Value;
                }
            }
        }
Re: Null-able DateTimePicker
От: Vasiliy2  
Дата: 27.09.16 05:48
Оценка:
Здравствуйте, AlexGin, Вы писали:

AG>Доброе время суток, уважаемые коллеги!


AG>Имеется проект (.NET, C#, WindowsForms), где на формах необходимы контролы ввода даты.

AG>Однако, бывают ситуации, когда дата не предоставлена пользователем (это нормальная ситуация, оговоренная в ТЗ по данному проекту).


AG>Вывод:

AG>Очень желательно, либо найти альтернативу DateTimePicker, либо советы по доработке стандартного DateTimePicker.
AG>Может быть, кто-нибудь сталкивался с подобной проблемой, и подскажет решение?

А свойство ShowCheckBox у DateTimePicker-а не решает такую задачу? Он как раз меняет цвет на неактивный, что говорит, что дата не нужна
Re[3]: Null-able DateTimePicker
От: AlexGin Беларусь  
Дата: 27.09.16 06:20
Оценка:
Здравствуйте, amironov79, Вы писали:

A>Делал похожим образом, только вместо MinValue и масок формата использовал ShowCheckBox и DateTime?.


A>
A>        public DbDateTimePicker()
A>        {
A>            this.ShowCheckBox = true;
A>        }

A>        public new DateTime? Value
A>        {
A>            get
A>            {
A>                if (this.Checked == false) {
A>                    return null;
A>                }
                
A>                return base.Value;
A>            }

A>            set
A>            {
A>                if (value == null) {
A>                    this.Checked = false;
A>                }
A>                else {
A>                    this.Checked = true;
A>                    base.Value = value.Value;
A>                }
A>            }
A>        }
A>

Спасибо, интересный вариант!
Re[2]: Null-able DateTimePicker
От: AlexGin Беларусь  
Дата: 27.09.16 06:27
Оценка:
Здравствуйте, уважаемый VladCore, Вы писали:

VC>Голый WinForms как и WPF в реальной жизни мало на что годится.

Я в курсе
Поэтому и спрашиваю — что найти, чем заменить...

VC>DevExpress порекомендую. ComponentOne и Infragistic не рекомендую.

Я раньше и сам работал с DevExpress — очень хорошая библиотека. Мне нравится!
Только тут у нас, MSVS-2013 Community edition. Не знаю, станет ли на него DevExpress.
Слышал от товарищей, что для этого нужно Enterprise. Такой студии у нас нет.

VC>Сам попросил совета

Огормное Спасибо!

VC>P.S. Вспомнил, что базовые Editor-ы у DevExpress бесплатные.

Тут весь вопрос в том, что именно скачивать (какую версию), чтобы стало совместно с MSVS-2013 CE?
Кстати, имеется ещё и MSVS-2015 Community.
Отредактировано 27.09.2016 6:41 AlexGin . Предыдущая версия .
Re[2]: Null-able DateTimePicker
От: AlexGin Беларусь  
Дата: 27.09.16 06:30
Оценка:
Здравствуйте, Vladek, Вы писали:

V>Сделай рядом чекбокс "Дата не указана", который будет блокировать DateTimePicker. И всё! Заказчика, скорее всего, устроит — а если нет, то хотя бы будет рабочий вариант "на время". На ковыряние в кишках винформсов можно убить всё время, а его обычно не хватает.

Спасибо, но "костылей" у нас хватает и без этого. Тем более, если "рядом" размещаются совсем другие контролы
Отредактировано 27.09.2016 6:33 AlexGin . Предыдущая версия .
Re[2]: Null-able DateTimePicker
От: AlexGin Беларусь  
Дата: 27.09.16 06:31
Оценка:
Здравствуйте, уважаемый Vasiliy2, Вы писали:

V>А свойство ShowCheckBox у DateTimePicker-а не решает такую задачу? Он как раз меняет цвет на неактивный, что говорит, что дата не нужна

Спасибо, это также интересный выход!
Re[3]: Null-able DateTimePicker
От: AlexGin Беларусь  
Дата: 05.10.16 12:04
Оценка:
AG>Я раньше и сам работал с DevExpress — очень хорошая библиотека. Мне нравится!
AG>Только тут у нас, MSVS-2013 Community edition. Не знаю, станет ли на него DevExpress.
AG>Слышал от товарищей, что для этого нужно Enterprise. Такой студии у нас нет.
Теперь выяснилось — можно и Community edition
Так, нормально установилась библиотека DevExpress v16.1.2 (for .NET).
Корректно интегрировалась в MSVS-2013 Community и в MSVS-2015 Community.
Re[2]: Null-able DateTimePicker
От: BlackEric http://black-eric.lj.ru
Дата: 10.10.16 17:48
Оценка:
Здравствуйте, VladCore, Вы писали:

VC>P.S. Вспомнил, что базовые Editor-ы у DevExpress бесплатные.


А можно ссылку где их брать?
https://github.com/BlackEric001
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.