通过c#中的子表单编辑主表单中的计时器

时间:2017-03-26 21:42:51

标签: c# forms timer

我在主窗体中有一个计时器,但我想通过第二个子表单更改计时器的间隔。但是,在获取文本框文本时,子窗体内有一个'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);    
    }
}

1 个答案:

答案 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。