你调用的对象是空的。 [NullReferencceException未处理]

时间:2013-05-10 06:47:21

标签: c# visual-studio-2010

与此主题相关:

if condition for MDI Parent Control

我需要将 DtextEditoR (表单)中我的标签中的文本调用到 frmMain (表单)中的另一个标签。我使用计时器而不是按钮,因为我按照这里的答案: Communicate between two windows forms in C#

导致:

frmMain.cs:

private DtexteditoR a;
        public frmMain(Form callingForm)
        {
            a = callingForm as DtexteditoR;
            InitializeComponent();
        }

        private void timercountline_Tick(object sender, EventArgs e)
        {
                a.lblcl = lblcountline.Text;
        }

DtexteditoR.cs

public string lblcl //rich
        {
            get { return lblcountline.Text; }
            set { lblcountline.Text = value; }
        }

但事情是这个错误总是显示: enter image description here

我该怎么做才能删除该错误?请帮助多多!

2 个答案:

答案 0 :(得分:1)

检查以下内容:
1-  检查构造函数中的变量a不为空 在InitializeComponent之后,您可以获得设计对象:

public frmMain(Form callingForm)
{
InitializeComponent();
a = callingForm as DtexteditoR;
}

3- 您的任务双方似乎相同:a.lblcl = lblcountline.Text表示:

lblcountline.Text = lblcountline.Text  : lblcountline.Text = value !!

4-检查定时器间隔并在InitializeComponent(在designto中设置为假)后启用它

public frmMain(Form callingForm)
{
InitializeComponent();
a = callingForm as DtexteditoR;
timer1.enabled=true;
}

答案 1 :(得分:1)

当你将a = callingForm as DtexteditoR作为frmMain()函数中的第一行调用它时,你不能期望callingForm从定时器或按钮单击足够快以使其不为空。跳过这些。相反,您必须在旧frmMain()表单代码后填充变量,然后在lblcountline中的新表单上调用它。假设callingForm位于a.lblcl = lblcountline.Text;,您可以在该代码中设置frmMain(),然后在wbits中,您可以使用该代码。