【问题标题】:No string is returned from static function C#静态函数 C# 没有返回字符串
【发布时间】:2013-08-28 19:36:33
【问题描述】:

您好,我正在尝试创建一个函数,该函数将在给定表单上的给定位置放置一个日历,并在字符串中返回选定的日期。

这是我目前所得到的:

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;

日历显示在表单上,​​但没有返回字符串。我尝试了一个事件处理程序,但由于静态属性,这不起作用。

提前感谢您的帮助。

【问题讨论】:

  • 您是否尝试设置断点并遍历静态方法?断点总是派上用场

标签: c# winforms static return-value monthcalendar


【解决方案1】:

您的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);

【讨论】:

  • 是的,这行得通!你能解释一下箭头的作用和(s,e)吗?请 (-:
  • @user2726516 这是lambda expression 的一部分。您可能想对此进行更多搜索。 (s,e)argument partDateSelected 事件处理程序有 2 个参数,=>{...} 部分定义事件处理程序的代码。实际上,我们可以定义一个单独的方法,例如命名为DateSelected_Handler,然后这样做:calender.DateSelected += DateSelected_Handler,但是DateSelected_Handler签名 应该适合采用object 和@ 2 个参数987654332@.
【解决方案2】:

您需要一个处理程序。从方法中删除 static 关键字。

【讨论】:

    猜你喜欢
    • 2015-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    • 1970-01-01
    相关资源
    最近更新 更多