2013-04-08 79 views
2

我想在我的表单中使用DateTimePicker,但我需要用户选择日期只有w/DropDown,我试图禁止在DateTimePicker本身(例如通过按KeyUp/Down)选择。DateTimePicker选择只与DropDown

//this.dtp_datum_pracVykaz.ValueChanged += new System.EventHandler(this.dtp_datum_pracVykaz_ValueChanged); 
this.dtp_datum_pracVykaz.DropDown += dtp_datum_pracVykaz_DropDown; 
this.dtp_datum_pracVykaz.CloseUp += dtp_datum_pracVykaz_CloseUp; 

void dtp_datum_pracVykaz_DropDown(object sender, System.EventArgs e) 
    { 
     this.dtp_datum_pracVykaz.ValueChanged += new System.EventHandler(this.dtp_datum_pracVykaz_ValueChanged); 
    } 

    void dtp_datum_pracVykaz_CloseUp(object sender, System.EventArgs e) 
    { 
     this.dtp_datum_pracVykaz.ValueChanged -= new System.EventHandler(this.dtp_datum_pracVykaz_ValueChanged); 
    } 

的问题是,DTP被启用,因此用户可以在不改变下拉日期(但不会有效果)。我想要类似DTP.Enabled = False;但必须启用DropDown的图标。

+0

这意味着你想让下拉菜单有一个只能激活的按钮,而不是整个下拉菜单。这样用户就不能输入任何值。对 ? – pordi 2013-04-08 11:25:13

+0

你可能误解了我。我希望datetimepicker不可选择/可变,另一方面,我希望包含下拉日历图标的控件部分处于活动状态,因此用户可以删除整个日历并在该处选择日期。 – Klemikaze 2013-04-09 09:13:16

+0

啊......好吧..现在得到.. thx – pordi 2013-04-09 09:53:58

回答

4

使用keydown事件 -

private void dateTimePicker1_KeyDown(object sender, KeyEventArgs e) 
    { 
     e.SuppressKeyPress = true; 
    } 

这样,用户按下任意键都将被忽略有效地禁用用户的键盘输入。

+0

Thx的输入,你的解决方案对我来说是有用的。 :] – Klemikaze 2013-04-09 12:06:51

+0

不客气! – Arun 2013-04-09 12:24:23

+0

Allthough这个函数作为一个解决方法,我得到的问题是不得不在其他地方再次点击两次以在其他表单项目中再次激活这些函数。 我想最好是在onchange事件中提取有效日期的值。 – k4yaman 2016-11-23 14:46:48