我正在尝试在方法中设置字符串变量,然后在按钮单击事件上调用该变量以填充文本框,但是我收到一个错误,调用该字符串变量表明它在当前上下文中不存在。
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上,说它在点击事件的当前上下文中不存在。
答案 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);
}
}
另请注意:如果您想要一个方法来修改参数,则需要使用ref
或out
关键字传递该参数。
答案 1 :(得分:0)
stDueTime
是MethodGBSizeDueEstimate
方法的本地。
你需要在班级提供,也许作为班级成员?
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);
}
}