2017-01-22 68 views
0

我正在寫一個Winform應用程序,並且在某個時刻我想提示用戶從日曆中選擇一個日期。所以在瀏覽Google之後,我想我可以使用MonthCalendar控件來實現這一點。現在這裏是我有:提示用戶使用MonthCalendar控件選擇日期

MonthCalendar monthCalendar = new MonthCalendar(); 
    monthCalendar.Show(); 

問題是,沒有任何反應,當這個代碼已達成。我做錯了什麼?

謝謝

+0

MonthCalendar控件應該被添加到它的形式controlscollection。它不能單獨顯示 – Steve

+0

這就解釋了一切。謝謝 ! – Toto

+0

可以創建一個帶有「MonthCalender」控件的小表單,並且可以通過一個按鈕來指示何時輸入日期。然後,只需在該窗體上顯示'ShowDialog()'以提示用戶輸入日期? – JohnG

回答

0

這是很基本的Windows窗體處理。

A MonthCalender是一個控件。你不能只顯示控件。控件只能在ContainerControl上顯示。 A ContainerControl是一種可以保存其他控件並小心顯示它們的控件。

最着名的ContainerControl之一是窗體。在Visual Studio中,我們通常使用設計器來創建表單並將控件放在上面。

根據您是否希望將特殊的MonthCalender僅放在一個特定的表單上,或者是否希望在多個表單上重複使用它,您必須決定是否將MonthCalender放置在窗體上或用戶控件上。

用戶控件的好處在於,您可以在Visual Studio中使用設計器將您的特殊MonthCalender拖放到任何形式上。

但最後,你必須把你的MonthCalender放在窗體上的某處。一旦你顯示你的表單,MonthCalender就會顯示出來。

public class MySpecialForm : Form 
{ 
    public MySpecialForm() 
    { 
     InitializeComponent(); 
    } 
} 

以上是由Visual Studio設計創建的,一旦你已經添加了一個表格到您的項目:右鍵單擊Solution Explorer中的項目,然後選擇添加 - Windows窗體

在您選擇的設計師工具箱(菜單視圖工具箱),在Common Controls下的工具箱中選擇MonthCalendar,然後單擊您希望顯示月份日曆的窗體。

這是基本的表格設計。一旦你加入你的MonthCalendar,該代碼是在InitializeComponent創建:

private System.Windows.Forms.MonthCalendar monthCalendar1; 

private void InitializeComponent() 
{ 
    this.monthCalendar1 = new System.Windows.Forms.MonthCalendar(); 
    // 
    // monthCalendar1 
    // 
    this.monthCalendar1.Location = new System.Drawing.Point(266, 83); 
    this.monthCalendar1.Name = "monthCalendar1"; 
    this.monthCalendar1.TabIndex = 3; 

你不會經常編輯這個文件,它更容易使用設計。

一旦你有你的形式和要表現出來,比如後,用戶點擊主窗體上的一個按鈕:

private void OnMainFormButtonClicked(object sender, ...) 
{ 
    using (var mySpecialForm = new MySpecialForm() 
    { 
     // if desired set some properties of the form before showing 
     mySpecialForm. ... 
     // show the form and wait for the result: 
     var dlgResult = mySpecialForm.ShowDialog(this); 
     // process the result 
     if (dlgResult == ...) 
     { 
      ProcessResult(form.GetFormResult); 
     } 
    } 
0

這樣做並不困難。下面的代碼使用一個小的Form,其中一個MonthCalender和一個Button在下面顯示的設計器中創建。

enter image description here

這種形式是由另一個「父」的形式調用。當用戶點擊「完成」按鈕時,父表單可以通過位於FormCalender的以下公共方法GetDT獲取此日期。此代碼僅獲取第一個選定日期,但用戶可以選擇多個日期。如果需要,你也可以做任何錯誤檢查。希望這可以幫助。

表1:

public Form1() { 
    InitializeComponent(); 
} 

private void button1_Click(object sender, EventArgs e) { 
    FormCalendar fc = new FormCalendar(); 
    fc.ShowDialog(); 
    MessageBox.Show("User Selected Date: " + fc.GetDT.ToLongDateString()); 
} 

FormCalendar

public FormCalendar() { 
    InitializeComponent(); 
} 

private void button1_Click(object sender, EventArgs e) { 
    this.Close(); 
} 

public DateTime GetDT { 
    get { 
    return monthCalendar1.SelectionStart; 
    } 
} 
相關問題