2012-04-23 2 views
1

Я изучаю C#/Gtk #, прыгая и создавая чудовищность приложения для моего личного удовольствия/пыток. Мое последнее затруднение заключается в том, как очистить элементы от ComboBoxEntry. Я нашел способ сделать это, но для меня это похоже.Gtk # - Правильный способ очистки ActiveText на 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; 
    } 
} 

Спасибо! Jason

ответ

1

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

+0

Sry, вы говорите о ComboboxEntry. Я могу подтвердить такое же поведение. Настолько жаль, что я путаю. – Chris

Смежные вопросы