C#无法从方法中获取字符串变量

时间:2018-03-27 16:58:32

标签: c# variables methods

我正在尝试在方法中设置字符串变量,然后在按钮单击事件上调用该变量以填充文本框,但是我收到一个错误,调用该字符串变量表明它在当前上下文中不存在。

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

    public static string MethodGBSizeDueEstimate(string stDueTime)
    {
        DateTime dtDueTimeRounded;
        DateTime dtDueTimeNow = DateTime.Now;
        DateTime dtDueTime;
        decimal dFileSize = Convert.ToDecimal(txtFileSize.Text);
        if (dFileSize > 2 && dFileSize <= 7)
        {
            if (dtDueTimeNow.Minute > 30)
            {
                dtDueTime = dtDueTimeNow.AddHours(9);
                dtDueTimeRounded = Convert.ToDateTime(dtDueTime.ToString("MM/dd/yyyy hh:00 tt"));
                stDueTime = Convert.ToString(dtDueTimeRounded);
            }
            if (dtDueTimeNow.Minute < 30)
            {
                dtDueTime = dtDueTimeNow.AddHours(8);
                dtDueTimeRounded = Convert.ToDateTime(dtDueTime.ToString("MM/dd/yyyy hh:00 tt"));
                stDueTime = Convert.ToString(dtDueTimeRounded);
            }
            if (dtDueTimeNow.Minute == 30)
            {
                dtDueTime = dtDueTimeNow.AddHours(8);
                dtDueTimeRounded = Convert.ToDateTime(dtDueTime.ToString("MM/dd/yyyy hh:30 tt"));
                stDueTime = Convert.ToString(dtDueTimeRounded);
            }
        }
        return stDueTime;
    }

    private void btnGenerateEboard_Click(object sender, EventArgs e)
    {
        if (rbtnGB.Checked)
        {
            MethodGBSizeDueEstimate(stDueTime);
        }
        if (rbtnNative2Rel.Checked)
        {
            txtEboardText.AppendText(Environment.NewLine + stDueTime);
        }
    }

错误发生在stDueTime上,说它在点击事件的当前上下文中不存在。

3 个答案:

答案 0 :(得分:1)

btnGenerateEboard_Click方法中,您将变量stDueTime传递给MethodGBSizeDueEstimate。但是这个变量还没有在这个方法中或在类级别定义。

因此,变量未定义,正如错误告诉你的那样。

在C#中,必须先声明所有变量才能使用它们。

private void btnGenerateEboard_Click(object sender, EventArgs e)
{
    string stDueTime;

    if (rbtnGB.Checked)
    {
        MethodGBSizeDueEstimate(stDueTime);
    }
    if (rbtnNative2Rel.Checked)
    {
        txtEboardText.AppendText(Environment.NewLine + stDueTime);
    }
}

另请注意:如果您想要一个方法来修改参数,则需要使用refout关键字传递该参数。

答案 1 :(得分:0)

stDueTimeMethodGBSizeDueEstimate方法的本地。

你需要在班级提供,也许作为班级成员?

public string stDueTime { get; set; }

当然,您需要确保通过调用MethodGBSizeDueEstimate设置此项。

答案 2 :(得分:0)

我稍微修改了你的方法MethodGBSizeDueEstimate()。我删除了输入参数stDueTime,因为它没有意义。只需让方法MethodGBSizeDueEstimate()返回Convert.ToString(dtDueTimeRounded)并将其分配给stDueTime事件中声明的变量btnGenerateEboard_Click

    public static string MethodGBSizeDueEstimate()
    {
        DateTime dtDueTimeRounded = new DateTime();
        DateTime dtDueTimeNow = DateTime.Now;
        DateTime dtDueTime = new DateTime();
        decimal dFileSize = Convert.ToDecimal(txtFileSize.Text);
        if (dFileSize > 2 && dFileSize <= 7)
        {
            if (dtDueTimeNow.Minute > 30)
            {
                dtDueTime = dtDueTimeNow.AddHours(9);
                dtDueTimeRounded = Convert.ToDateTime(dtDueTime.ToString("MM/dd/yyyy hh:00 tt")); 
            }
            else if (dtDueTimeNow.Minute < 30)
            {
                dtDueTime = dtDueTimeNow.AddHours(8);
                dtDueTimeRounded = Convert.ToDateTime(dtDueTime.ToString("MM/dd/yyyy hh:00 tt"));
            }
            else
            {
                dtDueTime = dtDueTimeNow.AddHours(8);
                dtDueTimeRounded = Convert.ToDateTime(dtDueTime.ToString("MM/dd/yyyy hh:30 tt"));
            }
        }
        return Convert.ToString(dtDueTimeRounded);
    }

    private void btnGenerateEboard_Click(object sender, EventArgs e)
    {
        string stDueTime;
        if (rbtnGB.Checked)
        {
            stDueTime = MethodGBSizeDueEstimate();
        }
        if (rbtnNative2Rel.Checked)
        {
            txtEboardText.AppendText(Environment.NewLine + stDueTime);
        }
    }