Никакая строка не возвращается из статической функции 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;
Календарь отображается в форме, но строка не возвращается. Я пробовал обработчик событий, но из-за статического свойства это не работает.
Заранее спасибо за помощь.
2 ответа
Решение
Ваш 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);
Вам нужен обработчик для этого. Удалите ключевое слово static из метода.