MONO GTK#Combobox条目 - 找到输入的值并将其设置为默认值

时间:2014-01-05 23:32:06

标签: c# combobox mono gtk#

首先,对不起我的英语。我不经常使用它。

我在Mac上学习使用GTK#的Mono C#,我遇到了一个功能问题。我不知道该怎么处理这个。

这是我的代码:

var searchString = itemNameCombo.Entry.Text;
string chk;

TreeIter ti;
itemNameCombo.Model.GetIterFirst (out ti);

do {
    chk = itemNameCombo.Model.GetValue(ti, 0).ToString();
    if(chk == searchString) {
        Console.WriteLine("Done - found"); itemNameCombo.SetActiveIter( ti );
        break;
    }
} while( itemNameCombo.Model.IterNext(ref ti));

它获取searchString(我输入组合框条目,并在我的组合成功搜索它。但我想按字母过滤结果,并只显示等于输入的文本。

请查看示例组合:

“书”,“船”,“电脑”,“鼠标”,“Zepelin”

如果我输入bo会很好,如果在弹出结果后,我只会看到:

“* Bo * ok”,“* bo * at”

我没有书,来自visual c#的代码没有帮助。读GTK对我来说很难,因为我只是两天的c#程序员。当我看到榜样时,我会学习。

感谢您的帮助。

编辑:好的,这不起作用 - 我找到了获得输入字符串的第一个字符的其他解决方案。但我想知道如何“建议”这样的事情:

图片:http://i.stack.imgur.com/0AJo5.jpg (这是在php / jquery中)

有没有可能在GTK中制作这样的东西#?

2 个答案:

答案 0 :(得分:0)

我找到了完全有效的解决方案: - )

using System;
using Gtk;

public class DemoEntryCompletion : Window
{
    static void Main ()
    {
        Application.Init ();
        new DemoEntryCompletion ();
        Application.Run ();
    }

  public DemoEntryCompletion () : base ("Demo Entry Completion")
  {
    this.BorderWidth = 10;
    this.Resizable = false;
    VBox vbox = new VBox ();

    Label label = new Label ("Completion demo, try writing <b>total</b> or </b>gnome</b> for example.");
    label.UseMarkup = true;
    vbox.PackStart (label, false, true, 0);

    Entry entry = new Entry ();
    entry.Completion = new EntryCompletion ();
    entry.Completion.Model = CreateCompletionModel ();
    entry.Completion.TextColumn = 0;
    vbox.PackStart (entry, false, true, 0);

    this.Add (vbox);
    this.ShowAll ();
  }

  TreeModel CreateCompletionModel ()
  {
    ListStore store = new ListStore (typeof (string));

    store.AppendValues ("GNOME");
    store.AppendValues ("total");
      store.AppendValues ("totally");

    return store;
  }
}

链接:http://api.xamarin.com/?link=T%3aGtk.EntryCompletion

无需过滤结果。

答案 1 :(得分:-1)

尝试这样排序,并在使用gtk#而不是mono

进行搜索时查看
     string tempsearch=""
     string tempitem=""
     string searche=""
     list lista

     foreach itemString in combo
        foreach char in itemstring
           tempitem=temp+char
             foreach chars in search
               tempsearch= tempsearch+chars
                 if (tempsearch==tempitem)
                   lista.add(itemstring)