是否可以在AutoCompleteStringCollection
附加Tag
中输入字符串?因为我在研究中找不到本地方式,我试图自己实现它。但现在的问题是,当用户点击AutoCompleteStringCollection
中的条目时,它似乎不会触发其他事件,例如在TextBox
中。
TextChanged
- 事件)还是选择(?? - 事件)?答案 0 :(得分:1)
由于似乎没有替代解决方案,我已经实现了自己的解决方案。
如果需要,请使用此选项。您可以使用TextChanged
- TextBox
或ComboBox
的事件来使用GetTag
扩展方法获取值。
public class TaggedAutoCompleteStringCollection : AutoCompleteStringCollection
{
private List<object> _tags;
public TaggedAutoCompleteStringCollection()
: base()
{
_tags = new List<object>();
}
public int Add(string value, object tag)
{
int result = this.Add(value);
_tags.Add(tag);
return result;
}
public void AddRange(string[] value, object[] tag)
{
base.AddRange(value);
_tags.AddRange(tag);
}
public new void Clear()
{
base.Clear();
_tags.Clear();
}
public bool ContainsTag(object tag)
{
return _tags.Contains(tag);
}
public int IndexOfTag(object tag)
{
return _tags.IndexOf(tag);
}
public void Insert(int index, string value, object tag)
{
base.Insert(index, value);
_tags.Insert(index, tag);
}
public new void Remove(string value)
{
int index = this.IndexOf(value);
if (index != -1)
{
base.RemoveAt(index);
_tags.RemoveAt(index);
}
}
public new void RemoveAt(int index)
{
base.RemoveAt(index);
_tags.RemoveAt(index);
}
public object TagOfString(string value)
{
int index = base.IndexOf(value);
if (index == -1)
{
return null;
}
return _tags[index];
}
}
public static class TaggedAutoCompleteStringCollectionHelper
{
public static object GetTag(this TextBox control)
{
var source = control.AutoCompleteCustomSource as TaggedAutoCompleteStringCollection;
if (source == null)
{
return null;
}
return source.TagOfString(control.Text);
}
public static object GetTag(this ComboBox control)
{
var source = control.DataSource as TaggedAutoCompleteStringCollection;
if (source == null)
{
return null;
}
return source.TagOfString(control.Text);
}
}