我在主窗体中有一个计时器,但我想通过第二个子表单更改计时器的间隔。但是,在获取文本框文本时,子窗体内有一个'System.NullReferenceException',代码在下面可见。任何建议,示例,提示或帮助将不胜感激。
带有计时器的主表格(由设计师添加);
public partial class Booyaa : Form
{
private void Booyaa_Load(object sender, EventArgs e)
{
BooyaaTimer.Interval = 45 * 60 * 1000); // 45 mins
BooyaaTimer.Tick += new EventHandler(BooyaaTimer_Tick);
BooyaaTimer.Start();
if (!Properties.Settings.Default.SettingShutdown)
{
MessageBox.Show("Time");
GetPass pass = new GetPass();
DialogResult result = pass.ShowDialog();
if (result == DialogResult.OK)
{
Properties.Settings.Default.SettingShutdown = true;
Properties.Settings.Default.Save();
}
else
{
Close();
}
}
}
}
计时器控制的其他子表单:
public partial class TimerControl : Form
{
public static Timer BooyaaTimer { get; internal set; }
public TimerControl()
{
InitializeComponent();
}
private void btn_confirm_Click(object sender, EventArgs e)
{
BooyaaTimer.Interval = Int32.Parse(textBox1.Text);
}
}
答案 0 :(得分:0)
正如@gusman指出的那样,检查主表单Booyaa
表单以确保BooyaaTimer
存在(即它不为空)。如果你没有拖放计时器控件来形成,请确保你在表单的构造函数中调用BooyaaTimer = new Timer()
。
因此,如果在此之前事情没有问题,那么您不会将计时器传递给子表单。如果 GetPass
实际上是 TimerControl
(我怀疑),那么您需要修改Booyaa_Load
这样的调用:
MessageBox.Show("Time");
GetPass pass = new GetPass();
/*****-----------******/
pass.BooyaaTimer = BooyaaTimer;//set sub-form's property
DialogResult result = pass.ShowDialog();
此外,在子表单中,在使用将从其他位置设置的对象之前检查空值并没有什么坏处。
if(BooyaaTimer!=null)
BooyaaTimer.Interval = Int32.Parse(textBox1.Text);
接下来,尝试使用int.TryParse。