我對 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條經驗 獲得超4個贊
可以使用該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 更改為其他內容。
- 1 回答
- 0 關注
- 107 瀏覽
添加回答
舉報
0/150
提交
取消