我正在学习C#/ Gtk#,跳入并为我个人的享受/折磨创造一个应用程序的怪物。我最近的窘境是如何清除ComboBoxEntry中的项目。我确实找到了办法,但这对我来说似乎很糟糕。
这是我的测试应用程序,我使用文本创建ComboBoxEntry,然后单击按钮清除它:
然后当我点击按钮清除它时,项目被删除但“foo”仍然作为活动文本:
无论如何,我想出了一种用以下代码清除它的方法。似乎应该有一个更好的方法来做到这一点,但我找不到一个所以我来这里进行理智检查:
using System;
using Gtk;
public partial class MainWindow: Gtk.Window
{
ListStore comboModel1 = new ListStore (typeof(string));
public MainWindow (): base (Gtk.WindowType.Toplevel)
{
Build ();
ComboBoxEntry1.Model = comboModel1;
comboModel1.AppendValues ("foo");
// Set "foo" as selected item
Gtk.TreeIter iter;
ComboBoxEntry1.Model.IterNthChild (out iter, 0);
ComboBoxEntry1.SetActiveIter (iter);
}
protected void Button1OnClicked (object sender, System.EventArgs e)
{
// Just doing this .Clear () still leaves "foo" as the ActiveText
comboModel1.Clear ();
// My kludge to clear ActiveText
comboModel1.AppendValues ("");
Gtk.TreeIter iter;
ComboBoxEntry1.Model.IterNthChild (out iter, 0);
ComboBoxEntry1.SetActiveIter (iter);
comboModel1.Clear ();
}
protected void OnDeleteEvent (object sender, DeleteEventArgs a)
{
Application.Quit ();
a.RetVal = true;
}
}
谢谢! 杰森
答案 0 :(得分:1)
我刚刚在MacOs 10.7上测试了它,一个简单的comboModel1.Clear()就可以了。没有ActiveText,而且Combobox不再可以访问事件,因为ListStore中没有值。 所以这可能是Windows上的一个错误。但我对此表示怀疑,并将在Windows上进行测试。 就像提示而不是使用IterNthChild一样,您可以使用GetIterFirst。