在 WinForms .NET 的 DateTimePicker 控件中有一个复选框。 但是我找不到当选中或取消选中该复选框时所触发的事件。 有什么办法吗?
在 WinForms .NET 的 DateTimePicker 控件中有一个复选框。 但是我找不到当选中或取消选中该复选框时所触发的事件。 有什么办法吗?
但是它会触发值改变事件。
为了比较新的“checked”状态是否更改,您需要存储旧的“checked”值:
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 ...
}
}
遇到了同样的问题。我需要在winforms DateTimePicker控件上添加一个CheckedChangedEvent事件。所以,在之前的答案启发下,我创建了一个继承自DateTimePicker的自定义控件DateTimePicker2,并实现了这个事件。看起来它能够工作,但不能保证。
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属性(隐藏了基础的Checked属性)和一个_checked字段来跟踪旧值,是因为:
基本上需要结合两种方法。
希望这可以帮助你。
event EventHandler<CheckedChangedEventArgs>
代替委托。要引发事件,请使用this.CheckedChanged?.Invoke(this, e)
。此外,在构造函数中订阅ValueChanged
事件:this.ValueChanged += DateTimePicker_ValueChanged
。这样,您可以确保没有人会阻止该类正常运行。新的Checked
用于程序更改,ValueChanged
事件在操作员进行更改时触发。 - Harald Coppoolseprivate 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
事件进行同样的操作,以便获取可以激活复选框的空格键按下。