2013-08-28 94 views
-1

你好,我試圖做一個函數,這將在一個給定的窗體givven位置shwing一個日曆,並返回一個字符串中選定的日期。沒有字符串從靜態函數返回C#

這是我到目前爲止有:

public static string ShowCalendar(Point locatieCalender, Form F1) 
    { 
     MonthCalendar calender = new MonthCalendar(); 
     calender.Location = locatieCalender; 
     calender.Show(); 
     calender.Visible = true; 
     calender.BringToFront(); 
     calender.Parent = F1; 
     string date = calender.SelectionRange.Start.ToShortDateString(); 
     DateTime dateValue = DateTime.Parse(date); 
     string dateForTextbox = dateValue.ToString("dd-MM-yyyy"); 

     //calender.Hide(); 
     return dateForTextbox; 

    } 

而且函數調用看起來是這樣的:

Point calenderLocatie = new Point(405, 69); 
     string dateForTextbox = HelpFunction.ShowCalendar(calenderLocatie, this); 
     txtPeriode_Tot.Text = dateForTextbox; 

壓光機顯示在表格上,但沒有返回的字符串。我試過一個事件處理程序,但由於靜態屬性,這不起作用。

在此先感謝您的幫助。

+0

你有沒有嘗試設置一個斷點,並walktrough靜態方法?斷點總是非常方便 – Max

回答

0

您的ShowCalendar方法無法以此方式返回字符串,我瞭解您希望顯示日曆,讓用戶選擇某個日期並在此之後隱藏它,將選定的日期存儲在字符串中,以下是它應該是:

public static void ShowCalendar(Point locatieCalender, Form F1, Control textBox) 
{ 
    MonthCalendar calender = new MonthCalendar(); 
    calender.Location = locatieCalender; 
    calender.Parent = F1; 
    //Register this event handler to assign the selected date accordingly to your textBox 
    calendar.DateSelected += (s,e) => { 
     textBox.Text = e.Start.ToString("dd-MM-yyyy"); 
     (s as MonthCalendar).Parent = null; 
     (s as MonthCalendar).Dispose();   
    }; 
    calender.Show(); 
    calender.BringToFront(); 
} 
//Use it 
Point calenderLocatie = new Point(405, 69); 
HelpFunction.ShowCalendar(calenderLocatie, this, txtPeriode_Tot); 
+0

是的這有效!你能解釋一下Arrow做什麼和(s,e)嗎?請求( - : –

+0

@ user2726516這是'lambda表達式'的一部分,你可能想要更多的搜索''(s,e)''是'argument part','DateSelected'事件處理器有2個參數,事實上,我們可以定義一個名爲DateSelected_Handler的獨立方法,然後執行:calender.DateSelected + = DateSelected_Handler,但是**簽名* * DateSelected_Handler'應該適合於'object'和'DateSelectedEventArgs'兩個參數。 –

+0

非常感謝你的解釋 –

0

你需要一個處理程序。從方法中刪除static關鍵字。