我有一个textbox.Leave事件处理程序,现在我不能从文本框中选择选项卡(我仍然可以单击out)。
以下是添加事件的方式:
...from表格..。
EKFG_Sig.Config.AutocompleteManager am = new EKFG_Sig.Config.AutocompleteManager(this.GetType().FullName);
foreach (Control c in this.Controls) {
if (c is TextBox) {
TextBox tb = (TextBox)c;
am.AddAutocomplete(tb);
}
}...from autocompleteManager..。
public void AddAutocomplete(TextBox control) {
AutoCompleteStringCollection collection = new AutoCompleteStringCollection();
DataTable dt = new DataTable("AutoComplete");
dt.Columns.Add("Name");
dt.Columns.Add("Values");
try {
dt.ReadXml(getAutocompleteFile());
} catch (Exception) {
initialize();
}
DataRow[] values = dt.Select("Name = '" + Name + "." + control.Name + "'");
foreach (DataRow row in values) {
collection.Add(row[1].ToString());
}
control.AutoCompleteMode = AutoCompleteMode.Suggest;
control.AutoCompleteSource = AutoCompleteSource.CustomSource;
control.AutoCompleteCustomSource = collection;
control.Leave += Autocomplete_Leave;
}
private void Autocomplete_Leave(object sender, EventArgs args){
((TextBox)sender).AutoCompleteCustomSource.Add(((TextBox)sender).Text);
writeAutocomplete(Name + "." + ((TextBox)sender).Name, ((TextBox)sender).Text);
}
private static void writeAutocomplete(String name, String addition) {
DataTable dt = new DataTable("AutoComplete");
dt.Columns.Add("Name");
dt.Columns.Add("Values");
try {
dt.ReadXml(getAutocompleteFile());
} catch (Exception) {
initialize();
}
DataRow[] values = dt.Select("Name = '" + name + "'");
foreach (DataRow row in values) {
if (row[1].ToString() == addition) {
return;
}
}
dt.Rows.Add(new object[] { name, addition });
try {
dt.WriteXml(getAutocompleteFile());
} catch (IOException) {
System.Threading.Thread.Sleep(500);
try {
dt.WriteXml(getAutocompleteFile());
} catch (IOException) {
//failed to write. ignore
}
}
}你知道是什么导致了这个问题吗?我该怎么解决呢?
如果我注释掉((TextBox)sender).AutoCompleteCustomSource.Add(((TextBox)sender).Text);,它就能工作。知道为什么吗?我怎么才能保持这条线还能用呢?
发布于 2009-12-30 21:16:57
盯着代码看,唯一可疑的东西是Thread.Sleep。它会不会每次都撞到它,从而使它看起来没有离开呢?
如果你还没做过这些.考虑取出代码并逐行/逐块地添加代码,直到您看到意外的行为。至少可以缩小你的范围。
是否还有其他东西附加到文本框的“离开”事件中,导致了悲伤?
也许在Enter事件上设置一个事件,看看它是否是一种强制恢复焦点的情况,而不是焦点永远不会离开的情况。
https://stackoverflow.com/questions/1982460
复制相似问题