1

私は、自分の個人的な楽しみ/拷問のために飛び込んでアプリの怪物を作成することで、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;
    }
}

ありがとう!ジェイソン

4

1 に答える 1

1

MacOs 10.7でテストしたところ、単純なcomboModel1.Clear()でうまくいきます。ActiveText がなく、さらに Combobox イベントにアクセスできないため、ListStore に値が存在しません。したがって、これは Windows のバグである可能性があります。しかし、私はそれを疑っており、Windows でもテストします。ヒントとして、IterNthChild を使用する代わりに GetIterFirst を使用できます。

于 2012-04-24T12:41:18.253 に答える