Gtk# - правильный способ очистить ActiveText на ComboBoxEntry?

Я изучаю C#/Gtk#, прыгая и создавая чудовищное приложение для своего личного удовольствия / пыток. Мой последний вопрос - как убрать элементы из ComboBoxEntry. Я нашел способ сделать это, но мне это кажется глупым.

Вот мое тестовое приложение, я создаю ComboBoxEntry с текстом и затем нажимаю кнопку, чтобы очистить его:

Начальная загрузка приложения

Затем, когда я нажимаю кнопку, чтобы очистить ее, элементы удаляются, но "foo" остается активным текстом:

Приложение с комбо очищено, но в нем все еще есть то противное 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;
    }
}

Спасибо! Джейсон

1 ответ

Я только что проверил это на MacOs 10.7, и простой comboModel1.Clear() добился цели. ActiveText отсутствует, более того, событие Combobox isnt недоступно, так как в ListStore нет значений. Так что, возможно, это ошибка в Windows. Но я сомневаюсь в этом и буду тестировать на Windows тоже. В качестве подсказки вместо использования IterNthChild вы можете использовать GetIterFirst.

Другие вопросы по тегам