2011-04-20 16 views
0

我其實有兩個問題。當用戶單擊箭頭來更改月份時,將自動選擇給定月份的1.。是否有可能防止這種行爲,所以當用戶點擊實際日期時,第一次觸發date_change?如何在MonthCalendar的date_changed事件中關閉表單?

public partial class Form2 : Form 
    { 
     public Form2() 
     { 
      InitializeComponent(); 
     } 

     private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e) 
     { 
      this.Close(); 
     } 
    } 

我把MonthCalendar放在一個單獨的窗體中。當點擊一個按鈕時,這個表單被打開,用戶可以選擇一個日期。在date_changed事件中,我希望表單關閉,所以我做了一個this.Close(),但是這使得應用程序崩潰,並且我得到一個ObjectDisposedException:

無法訪問處置的對象。 對象名稱:'MonthCalendar'

如何關閉表單?

編輯:

public partial class Form1 : Form 
    { 

     Form2 frm2; 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      frm2 = new Form2(); 
      frm2.theForm = this; 
      frm2.Show(); 

     } 


     public void closeAform() 
     { 
      frm2.Close(); 
     } 

    } 

public partial class Form2 : Form 
    { 

     public Form1 theForm { get; set; } 

     public Form2() 
     { 
      InitializeComponent(); 
     } 

     private void monthCalendar1_DateChanged(object sender, DateRangeEventArgs e) 
     { 
      theForm.closeAform(); 
     } 
    } 
+0

這就好比在你腳下的切割分支。你應該調用一個委託來處理this.Close(); – Gabriel 2011-04-20 10:25:46

+0

你的例外發生在哪裏?我想也許你想要做的是在你的表格上有一個事件發生在日期改變時。在主窗體中處理並關閉日曆窗體。 – Nick 2011-04-20 10:27:03

+0

你們任何人都可以爲我做一個這樣做的例子嗎?我編輯了這篇文章的代碼,包括我自己的嘗試,但沒有奏效。 – Bildsoe 2011-04-20 10:35:15

回答

2
  1. 不,這不可能阻止這種行爲。當用戶導航到新的月份時,這與更改日期是一樣的。另一種行爲沒有多大意義:當選擇新月時,必須選擇該月的一些日,並且該月的第一天與任何月份的第一天一樣好。實際上,對DateChanged event的說明甚至解釋爲:

    由於用戶選擇或通過下一個/上一個月的導航導致日期範圍發生變化時發生。

    您是否考慮過處理DateSelected event?我懷疑這會更接近你想做的事情。它的描述如下:

    當用戶選擇日期或日期範圍時發生。

  2. 而且像變魔術一樣,當我處理DateSelected事件相反,關閉窗體工作得很好:

    public class DatePickerForm : Form 
    { 
        public DatePickerForm() 
        { 
         InitializeComponent(); 
        } 
    
        private void calendar_DateSelected(object sender, DateRangeEventArgs e) 
        { 
         this.Close(); 
        } 
    }