C# Gtk.NodeView.AddNode中出现异常

C# Gtk.NodeView.AddNode中出现异常,c#,gtk#,C#,Gtk#,当我想在我的NodeView中添加元素时,我遇到了一个异常: mContactsNodeStore = new NodeStore(typeof(Contact)); mContactsNodeView = new NodeView(mContactsNodeStore); mContVBox2.PackStart(mContactsNodeView, true, true, 0); mContactsNodeView.AppendColumn("Icon", new CellRendererP

当我想在我的NodeView中添加元素时,我遇到了一个异常:

mContactsNodeStore = new NodeStore(typeof(Contact));
mContactsNodeView = new NodeView(mContactsNodeStore);
mContVBox2.PackStart(mContactsNodeView, true, true, 0);
mContactsNodeView.AppendColumn("Icon", new CellRendererPixbuf(), "pixbuf", 0);
mContactsNodeView.AppendColumn("Name", new CellRendererText(), "text", 1);
Gtk回调委托中出现异常 注意:应用程序可以使用GLib.ExceptionManager.UnhandledException来处理异常。 System.IndexOutOfRangeException:数组索引超出范围。 在Gtk.NodeStore.get_value_cb(Int32 node_idx,Int32 col,GLib.value&val)[0x00000] 在GLib.ExceptionManager.RaiseUnhandledException(System.Exception e,布尔值是_终端) 在Gtk.NodeStore.get_value_cb(Int32 node_idx,Int32 col,value ByRef val) 在Gtk.Application.Gtk_main()上 在Gtk.Application.Run()处 在/home/tomcatfort/Projects/IcePipe/GUI/Program.cs中的IcePipe.Program.Main(System.String[]args)处:第18行

我用mono 2.4.2.3编写了这段代码。我用的是Gtk。 您可以从以下链接下载我的代码:

我不知道问题的原因,我找不到任何可能的问题

以下是引发异常的代码:

public MainWindow () : base(Gtk.WindowType.Toplevel)
{
    this.Build();
    mContactsNodeStore.AddNode(new Contact("Kutya", new Gdk.Pixbuf("Img/Refresh24x24.png"))); //AddNode(...) throws it. 
}
创建联系人实例不会导致异常,我尝试过

这是我如何进行点评的:

mContactsNodeStore = new NodeStore(typeof(Contact));
mContactsNodeView = new NodeView(mContactsNodeStore);
mContVBox2.PackStart(mContactsNodeView, true, true, 0);
mContactsNodeView.AppendColumn("Icon", new CellRendererPixbuf(), "pixbuf", 0);
mContactsNodeView.AppendColumn("Name", new CellRendererText(), "text", 1);
以下是联系方式:

[Gtk.TreeNode (ListOnly = true)] //What is this for?
public class Contact : Gtk.TreeNode, IDisposable
{
    #region Fields and properties
    [Gtk.TreeNodeValue (Column = 1)]
    private string pName;

    /// <summary>
    /// Gets or sets the name of the contact.
    /// </summary>
    public string Name {
        get {return pName;}
        protected set {pName = value;}
    }

    [Gtk.TreeNodeValue (Column = 0)]
    private Gdk.Pixbuf pIcon;

    /// <summary>
    /// Gets or sets the icon of the contact.
    /// </summary>
    public Gdk.Pixbuf Icon {
        get {return pIcon;}
        protected set {pIcon = value;}
    }
    #endregion


    #region Constructor adn disposer
    /// <summary>
    /// Initialize the contact.
    /// </summary>
    public Contact(string aName, Gdk.Pixbuf aIcon) : base()
    {
        pName = aName;
        pIcon = aIcon;
    }

    /// <summary>
    /// Release allocated resources.
    /// </summary>
    public void Dispose()
    {
        Disposing(this, null);
    }
    #endregion


    #region Events
    /// <summary>
    /// Fired when the contact is being disposed.
    /// </summary>
    public event EventHandler Disposing;
    #endregion  
}
[Gtk.TreeNode(ListOnly=true)]//这是干什么用的?
公共类联系人:Gtk.TreeNode,IDisposable
{
#区域字段和属性
[Gtk.TreeNodeValue(第1列)]
私有字符串pName;
/// 
///获取或设置联系人的名称。
/// 
公共字符串名{
获取{return pName;}
受保护集{pName=value;}
}
[Gtk.TreeNodeValue(列=0)]
私人Gdk.Pixbuf pIcon;
/// 
///获取或设置联系人的图标。
/// 
公共Gdk.Pixbuf图标{
获取{return pIcon;}
受保护集{pIcon=value;}
}
#端区
#区域构造函数和处理器
/// 
///初始化联系人。
/// 
公共联系人(字符串aName,Gdk.Pixbuf-aIcon):base()
{
pName=aName;
pIcon=aIcon;
}
/// 
///释放分配的资源。
/// 
公共空间处置()
{
处置(本,无效);
}
#端区
#地区活动
/// 
///在处理触点时触发。
/// 
公共事件处理程序;
#端区
}

联系人类中有两个字段都定义为“Column=0”,因此没有第1列

尝试将pIcon字段更改为:

[Gtk.TreeNodeValue (Column = 1)]
private Gdk.Pixbuf pIcon;
这将指示树视图应该有2列


可能会对您有所帮助。

联系人类中有两个字段都定义为“Column=0”,因此没有第1列

尝试将pIcon字段更改为:

[Gtk.TreeNodeValue (Column = 1)]
private Gdk.Pixbuf pIcon;
这将指示树视图应该有2列


可能对你有帮助。

我也有同样的问题。将访问的字段
公开
而不是
私有
解决了我的问题。当然,您应该记住,将可见性更改为
public
可能不是最好的解决方案,因此您可以将其包装为只读属性或类似的内容。

我也遇到了同样的问题。将访问的字段
公开
而不是
私有
解决了我的问题。当然,您应该记住,将可见性更改为
public
可能不是最好的解决方案,因此您可以将其包装为只读属性或类似的内容。

请添加代码中引发异常的部分。谢谢。请听鲍比的评论。看起来您正试图取回不存在的行,但如果不查看代码,则很难判断发生了什么。请添加代码中引发异常的部分。谢谢。请听鲍比的评论。看起来您正试图获取一个不存在的行,但是如果不查看代码,很难判断发生了什么。我更正了它,但仍然得到相同的异常。我将我的代码与你链接中的代码进行了比较,但仍然找不到问题。我更正了它,但仍然得到相同的异常。我将我的代码与你链接中的代码进行了比较,但我仍然找不到问题所在。