2011-08-17 22 views
10

कैसे प्राप्त करें Winforms .NET के डेटाटेमिपर नियंत्रण में एक चेक बॉक्स है। लेकिन मुझे उस ईवेंट को नहीं मिला जो चेक बॉक्स चेक या अनचेक होने पर ट्रिगर होता है। क्या कोई रास्ता है?डेटीमपिकर सी # विनफॉर्म चेक/अनचेक इवेंट

+0

यहाँ http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/27dd3141-5dfb-439e-8e30-e051a019303a/ – V4Vendetta

उत्तर

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

    } 
} 
10

हालांकि यह मूल्य बदल घटना

+2

एक नजर डालें। –

2

एक ही समस्या में भागो। मुझे डेटटाइम पिकर नियंत्रण के Winforms पर एक चेकड चेंजएवेंट की आवश्यकता थी। तो मेरे सामने जवाबों की प्रेरणा के साथ मैंने डेटटाइम पिकर 2 नामक एक विरासत उपयोगकर्ता नियंत्रण बनाया, जो डेटटाइम पिकर से विरासत में है जो इस घटना को लागू करता है। ऐसा लगता है कि यह काम करता है लेकिन कोई गारंटी नहीं है।

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 एक को छिपाने के लिए), क्योंकि

  1. base.Checked संपत्ति नहीं करता है प्रोग्रामैटिक रूप से बदलते समय ValueChanged ईवेंट को आग लगाना और इसलिए एक नई संपत्ति की आवश्यकता होती है जो ऐसा कर सकती है।
  2. यह। यूके से बदलते समय चेक की गई नई संपत्ति वैल्यू चेंजेड ईवेंट को नहीं चलाती है और इसलिए आधार को ट्रैक करने वाले ध्वज की आवश्यकता होती है। जांच की गई संपत्ति।

असल में दोनों दृष्टिकोणों का संयोजन आवश्यक था।

मुझे आशा है कि इस मदद करता है।

+0

अच्छा और सरल समाधान। फैशन 2017 के अनुसार इसे बनाने के लिए, प्रतिनिधियों के बजाय 'ईवेंट इवेंट हैंडलर <चेकड चेंजएवेंटआर्ग>' का उपयोग करें। ईवेंट का उपयोग करने के लिए 'यह। चेक किया गया चेंज? .वॉवोक (यह, ई)' इसके अलावा, कन्स्ट्रक्टर में 'वैल्यू चेंज' की सदस्यता लें: 'यह। वैल्यू चेंज + = डेटटाइम पिकर_वेल्यू चेंज'। इस तरह आप निश्चित हैं कि कोई भी इस वर्ग को उचित कार्य करने से रोक नहीं सकता है। नए चेक किए गए प्रोग्रामेटिक परिवर्तनों के लिए बुलाया जाता है, ValueChanged ईवेंट ऑपरेटर द्वारा किए गए परिवर्तनों के दौरान उठाया जाता है। –

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 घटना के साथ भी ऐसा ही करने की आवश्यकता होगी पर कब्जा कर सकते हैं। जब तक जांच की गई संपत्ति कोड में सेट कर दिया जाता

संबंधित मुद्दे