1

为什么我一直收到此错误?"对象引用未设置为对象的实例。 "

这是代码,错误指向哪里:

namespace Sell_System
{
    public partial class Form4 : Form
    {
private TextBox dateContainer;
        private TextBox timeContainer;
private Timer timer;

 public Form4()
{
    InitializeComponent();

    dateContainer.Text = DateTime.Now.ToString("dddd, MMMM dd, yyyy", System.Globalization.CultureInfo.InvariantCulture);

    timeContainer.Text = DateTime.Now.ToString("h:mm tt", System.Globalization.CultureInfo.InvariantCulture);

    timer.Tick += new System.EventHandler(this.StartTimer);
    timer.Interval = 60000;
    timer.Start();
}

我将它放入公共 Form4() 的原因是因为我希望时间总是每 60 秒更新一次,当时间到达 00:00AM 时,日期将增加一天。

错误指向 dateContainer.Text 并且当我评论该命令时,错误将指向 timeContainer.Text 等等,直到 timer.Start();

4

2 回答 2

1

当您将控件放在窗体的表面上时,就完成了在 winform 应用程序上声明和初始化控件的工作。这样,WinForm 设计器将适当的代码添加到 InitializeComponent 中,您就可以在代码中使用您的控件。

如果您手动添加控件,就像您所做的那样,那么您有责任进行初始化,定义它们的一些基本属性并将这些控件添加到表单控件集合中。

像这样的东西

namespace Sell_System
{
    public partial class Form4 : Form
    {
       // Declaration of your controls....
       private TextBox dateContainer;
       private TextBox timeContainer;
       private Timer timer;

       public Form4()
       {
          // This is were the controls defined by the form designer will be initialized
          // using all the default values for their property
          InitializeComponent();

          // Now you do it manually for the controls added manually
          dateContainer = new TextBox();
          // At least define the position where the control should appear on the form surface
          dateContainer.Location = new Point(10, 10);
          dateContainer.Text = DateTime.Now.ToString("dddd, MMMM dd, yyyy", System.Globalization.CultureInfo.InvariantCulture);

          timeContainer = new TextBox();
          timeContainer.Location = new Point(30, 10);
          timeContainer.Text = DateTime.Now.ToString("h:mm tt", System.Globalization.CultureInfo.InvariantCulture);

          // To be shown the controls should be added to the Form controls collection    
          this.Controls.Add(dateContainer);
          this.Controls.Add(nameContainer);

          // The WinForm timer is just a component so it is enough to Initialize it
          timer = new System.Windows.Forms.Timer();             
          timer.Tick += new System.EventHandler(this.StartTimer);
          timer.Interval = 60000;
          timer.Start();
      }
}

如果您必须定义控件的许多属性,以这种方式创建控件可能会很快变得混乱。因此,如果动态需求不是真正需要的,手动创建控件并不是一个好习惯。

于 2013-09-05T10:41:48.277 回答
0

当你制作一个类实例时

private TextBox dateContainer;

在程序的某些部分为其分配值之前,它将为空。你需要dateContainer = ...在instructor或者init函数中写。

于 2013-09-05T10:39:45.633 回答