构建和使用Scintilla.NET的问题

时间:2011-04-08 23:08:25

标签: c# winforms visual-studio-2010 .net-2.0

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

它可以工作,但当我点击新标签按钮时,我收到一条错误消息:

  

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

此代码中出现问题:

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);
}

3 个答案:

答案 0 :(得分:4)

问题是您尚未初始化ScinList。类的字段初始化为其默认值,在本例中为null

你需要在某处初始化它,无论它在哪里声明......

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

...或在构造函数中......

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

如果此行确实出现在您的代码中,请使用代码编辑您的问题。

答案 1 :(得分:2)

问题是你没有初始化ScinList

改变这个:

public List<ScintillaNet.Scintilla> ScinList;

对此:

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

答案 2 :(得分:2)

看起来您定义了公共字段ScinList:

public List <ScintillaNet.Scintilla> ScinList;

但您实际上从未创建新列表并将其分配到您的字段:

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