为了账号安全,请及时绑定邮箱和手机立即绑定

将 Gtk.NodeView 投射到 C# 中的另一个类

将 Gtk.NodeView 投射到 C# 中的另一个类

C#
HUH函数 2022-10-23 10:20:44
我对 Gtk# 很陌生(不到一周),所以希望这不是一个完全错误的问题:我在 Gtk# 窗口中有一个 NodeView 小部件。它只是一个歌曲列表。当我点击歌曲时,我想更新“当前播放:”标签。到目前为止,我的代码如下:protected void onSongSelected(object o, RowActivatedArgs args)    {        object selection = o;        //something needs to go here        currentSongName.Text = selection.ToString();    }现在,我知道这是不正确的。但是,这给了我对象 o 的类型(以及变量“selection”),即“Gtk.NodeView”。但是,我无法弄清楚如何使用 NodeView 来访问所选节点中的任何信息。我试图通过遵循此页面的指南来解决我的问题:https: //www.mono-project.com/docs/gui/gtksharp/widgets/nodeview-tutorial/我创建了一个名为 MasterLibrary 的 TreeNode 类(与示例几乎相同)并尝试将 o 转换为 MasterLibrary 类型,如下所示:object selection = (MasterLibrary)o;但是,这会导致我的程序崩溃,因为它说将 NodeView 转换为 MasterLibrary 类是无效的。任何有关解决此问题的帮助将不胜感激。
查看完整描述

1 回答

?
守着一只汪

TA贡献1872条经验 获得超3个赞

可以使用该Selection属性来识别 NodeView 的选定项。您需要使用TreeIter和TreeModel,如下所示:


Gtk.TreeIter _i;

Gtk.TreeModel _m;

if (myNodeView.Selection.CountSelectedRows () > 0) {

  myNodeView.Selection.GetSelected (out _m, out _i);

  if (_m != null && _i != null) {

    currentSongName.text = _m.GetValue (_i, 0); // assuming your song name is in column 0 of the NodeView.

  }

}

请注意,最好先检查选定的行数以避免空引用异常,但我会同时检查模型和迭代器上的空值是否基于防御性编程。如果不同的列(即不是 col 0)包含您的歌曲名称,则只需将列 # 从 0 更改为其他内容。


查看完整回答
反对 回复 2022-10-23
  • 1 回答
  • 0 关注
  • 73 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信