Как получить событие datetimepicker c # winform проверено / не проверено - PullRequest
11 голосов
/ 17 августа 2011

В элементе управления datetimepicker для winforms .net установлен флажок.Но я не смог найти событие, которое срабатывает, когда флажок установлен или не установлен.Есть ли выход?

Ответы [ 4 ]

13 голосов
/ 17 августа 2011

Однако оно вызывает событие изменения значения

3 голосов
/ 19 мая 2014

столкнуться с той же проблемой. Мне нужно было CheckedChangedEvent для элемента управления DateTimePicker winforms. Поэтому, вдохновившись ответами передо мной, я создал унаследованный пользовательский элемент управления с именем 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 (чтобы скрыть базу. Проверенное) и поле _checked, чтобы сохранить грузовик со старым значением, заключается в том, что

  1. Свойство base.Checked не запускает событие ValueChanged при программном изменении, и поэтому требуется новое свойство, которое может это сделать.
  2. новое свойство this.Checked не запускает событие ValueChanged при изменении из пользовательского интерфейса и поэтому нуждается в флаге, который будет отслеживать свойство base.Checked.

По сути, необходима комбинация обоих подходов.

Надеюсь, это поможет.

2 голосов
/ 15 мая 2013

Вам нужно сохранить старое «проверенное» значение, чтобы сравнить с новым, чтобы вы могли определить, изменилось ли «проверенное» состояние:

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 ...

    }
}
0 голосов
/ 31 января 2018

Я знаю, что это очень старо, но это может кому-то помочь.

Вы можете захватить 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, чтобы получить клавишу пробела, которая также может активировать флажок.

...