首先,对不起我的英语。我不经常使用它。
我在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中制作这样的东西#?
答案 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)