2009-10-09 63 views
0

我有一个控件继承自另一个控件(TxTextControl)。我有一个SelectedText属性,基本上包装基本SelectedText属性,这显然是需要的,因为我的控件正在实现与该属性的接口。代码是这样的:对象形式的设计时错误

public string SelectedText 
{ 
    get 
    { 
    return base.Selection.Text; // Error here (#1042) 
    } 
    set 
    { 
    if (base.Selection == null) 
    { 
     base.Selection = new TXTextControl.Selection(0, 0); 
    } 
    base.Selection.Text = value; 
    } 
} 

当我把这个控件放在窗体上时,没有问题。它编译并运行。一切看起来不错。然而,当我保存,关闭然后重新打开表单,表单设计器显示此错误:

Object reference not set to an instance of an object.
1. Hide Call Stack

at Test.FormattedTextBox2.get_SelectedText() in C:\Projects\Test\FormattedTextBox2.cs:line 1042

任何人都知道是怎么回事?我即将拔掉我的最后一缕头发......

更新:
darkassisin93的答案并不完全正确,但那是因为我发布的代码并不完全正确。在尝试访问该对象的属性之前,我需要测试base.Selection是否为null。无论如何,这个答案让我朝着正确的方向前进。下面是实际的解决方案:

public string SelectedText 
{ 
    get 
    { 
    string selected = string.Empty; 
    if (base.Selection != null) 
    { 
     selected = base.Selection.Text; 
    } 
    return selected; 
    } 
    set 
    { 
    if (base.Selection == null) 
    { 
     base.Selection = new TXTextControl.Selection(0, 0); 
     // Have to check here again..this apparently still 
     // results in a null in some cases. 
     if (base.Selection == null) return; 
    } 
    base.Selection.Text = value; 
    } 
} 
+0

你可以发布FormattedTextBox2.cs的内容,特别是第1042行吗? – 2009-10-10 00:03:55

+0

已更新的问题表明错误与发布的代码有关,并且该行发生。 – 2009-10-10 00:09:45

回答

2

尝试

return base.SelectedText ?? string.Empty; 

这很可能是因为基类的SelectedText属性设置为null更换

return base.SelectedText; 

+0

谢谢。这没有做到,但它让我朝着写作方向前进。我会更新我的问题以反映实际的解决方案。这确实是一个空的问题,一旦我得到了测试,现在它的工作。 – 2009-10-10 00:30:31