2011-04-08 89 views
1

我正在使用/构建Scintilla.NET并将项目切换到.NET 2.0以解决兼容性问题。构建和使用Scintilla.NET的问题

它的工作原理,但是当我点击新标签页按钮,我得到它说的错误:

对象引用未设置到对象的 实例。

的问题发生在这个代码:

ScintillaNet.Scintilla currentScin; 
Stream Stream1; 

public List <ScintillaNet.Scintilla> ScinList; 

//Code for various events 

private void New_Click(object sender, EventArgs e) 
{ 
    TabPage tabp = new TabPage(); 
    ScintillaNet.Scintilla scin = new ScintillaNet.Scintilla(); 
    scin.Dock = DockStyle.Fill; 

    scin.Margins[0].Width = 20; 
    scin.ConfigurationManager.CustomLocation = "My Styles"; 
    scin.ConfigurationManager.Language = "lua"; 

    scin.Parent = tabp; 

    // This line throws "Object reference not set to an instance of an object." 
    ScinList.Add(scin); 

    tabControl1.TabPages.Add(tabp); 
} 

回答

4

问题是你还没有初始化ScinList。类的字段被初始化为它们的默认值,在这种情况下是null

你需要的地方初始化它,无论是在声明...

public List<ScintillaNet.Scintilla> ScinList = new List<ScintillaNet.Scintilla>(); 

...或...构造

public CLASSNAMEHERE() 
{ 
    ScinList = new List<ScintillaNet.Scintilla>(); 
} 

如果该行实际上并出现在你的代码,请用这样的代码编辑你的问题。

2

的问题是你没有初始化ScinList

更改此:

public List<ScintillaNet.Scintilla> ScinList; 

要这样:

public List<ScintillaNet.Scintilla> ScinList = new List<ScintillaNet.Scintilla>(); 
+0

我没意识到你必须初始化列表..我想不出为什么我没有。谢谢 – 2011-04-08 23:15:14

2

看起来你定义的公共领域ScinList:

public List <ScintillaNet.Scintilla> ScinList; 

,但你从来没有真正建立一个新的列表,并分配它到您的领域:

public List <ScintillaNet.Scintilla> ScinList = new List<ScintillaNet.Scintilla>();