C# Gtk.NodeView.AddNode中出现异常
当我想在我的NodeView中添加元素时,我遇到了一个异常: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
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
可能不是最好的解决方案,因此您可以将其包装为只读属性或类似的内容。请添加代码中引发异常的部分。谢谢。请听鲍比的评论。看起来您正试图取回不存在的行,但如果不查看代码,则很难判断发生了什么。请添加代码中引发异常的部分。谢谢。请听鲍比的评论。看起来您正试图获取一个不存在的行,但是如果不查看代码,很难判断发生了什么。我更正了它,但仍然得到相同的异常。我将我的代码与你链接中的代码进行了比较,但仍然找不到问题。我更正了它,但仍然得到相同的异常。我将我的代码与你链接中的代码进行了比较,但我仍然找不到问题所在。