winforms .net的datetimepicker控件中有一个复选框。 但是,当选中或取消选中复选框时,我找不到触发的事件。 有出路吗?
答案 0 :(得分:13)
但它会触发值更改事件
答案 1 :(得分:2)
您必须存储旧的“已检查”值才能与新值进行比较,因此您可以确定“已检查”状态是否已更改:
bool oldDateChecked = false; //if it's created as not checked
private void dtp_filtro_date_ValueChanged(object sender, EventArgs e)
{
if (this.dtp_filtro_date.Checked != oldDateChecked)
{
oldDateChecked = this.dtp_filtro_date.Checked;
//do your stuff ...
}
}
答案 2 :(得分:2)
遇到同样的问题。我需要在winforms DateTimePicker控件上使用CheckedChangedEvent。因此,在我之前的答案的灵感,我创建了一个名为DateTimePicker2的继承用户控件,继承自实现此事件的DateTimePicker。看起来它有效,但没有保证。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace MyNameSpace
{
public partial class DateTimePicker2 : DateTimePicker
{
private bool _checked;
public new bool Checked
{
get
{
return base.Checked;
}
set
{
if (value != base.Checked)
{
base.Checked = value;
_checked = base.Checked;
OnCheckedChanged(new CheckedChangedEventArgs { OldCheckedValue = !value, NewCheckedValue = value });
}
}
}
public event CheckedChangedEventHandler CheckedChanged;
public DateTimePicker2()
{
InitializeComponent();
_checked = Checked;
}
protected virtual void OnCheckedChanged(CheckedChangedEventArgs e)
{
if (CheckedChanged != null) CheckedChanged(this, e);
}
private void DateTimePicker2_ValueChanged(object sender, EventArgs e)
{
if (Checked != _checked)
{
_checked = Checked;
CheckedChangedEventArgs cce = new CheckedChangedEventArgs { OldCheckedValue = !_checked, NewCheckedValue = _checked };
OnCheckedChanged(cce);
}
}
}
public delegate void CheckedChangedEventHandler(object sender, CheckedChangedEventArgs e);
public class CheckedChangedEventArgs : EventArgs
{
public bool OldCheckedValue { get; set; }
public bool NewCheckedValue { get; set; }
}
}
当然,不要忘记订阅设计师的DateTimePicker2_ValueChanged事件。
之所以我使用新的Checked属性(隐藏base.Checked一个)和_checked字段来保持旧值的卡车,是因为
基本上需要两种方法的组合。
我希望这会有所帮助。
答案 3 :(得分:0)
我知道这是超级老,但这可以帮助别人。
您可以捕获DataTimePicker.MouseUp
事件
private void dateTimePicker1_MouseUp(object sender, MouseEventArgs e)
{
if (((DateTimePicker)sender).Checked)
{
//Do whatever you need to do when the check box gets clicked
}
else
{
//Do another stuff...
}
}
您需要对KeyUp
事件执行相同的操作,以便按下也可以激活复选框的Space键。