Gtk# - 在ComboBoxEntry上清除ActiveText的正确方法?

时间:2012-04-23 17:25:47

标签: c# mono gtk gtk#

我正在学习C#/ Gtk#,跳入并为我个人的享受/折磨创造一个应用程序的怪物。我最近的窘境是如何清除ComboBoxEntry中的项目。我确实找到了办法,但这对我来说似乎很糟糕。

这是我的测试应用程序,我使用文本创建ComboBoxEntry,然后单击按钮清除它:

Initial application load

然后当我点击按钮清除它时,项目被删除但“foo”仍然作为活动文本:

Application with the combo cleared but still has that pesky foo in there

无论如何,我想出了一种用以下代码清除它的方法。似乎应该有一个更好的方法来做到这一点,但我找不到一个所以我来这里进行理智检查:

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;
    }
}

谢谢! 杰森

1 个答案:

答案 0 :(得分:1)

我刚刚在MacOs 10.7上测试了它,一个简单的comboModel1.Clear()就可以了。没有ActiveText,而且Combobox不再可以访问事件,因为ListStore中没有值。 所以这可能是Windows上的一个错误。但我对此表示怀疑,并将在Windows上进行测试。 就像提示而不是使用IterNthChild一样,您可以使用GetIterFirst。