我正在修復使用名爲CompleteComboBox
的用戶控件的c#
項目。C#Combobox用戶控件不起作用,因爲它應該
它功能部分。
退格不起作用。
第一次用戶在
textbox
部件中輸入字符串時,該列表將按照其應有的方式打開,並且位於右側。第二次 - 列表未打開,但顯示textbox
部分中的匹配行。然後,如果我打開列表並開始編寫其中一個項目的開頭,但是然後單擊其中一個項目,然後按回車 - 此項目未被選中,而是在text box
部件中輸入字母時選擇的項目。
希望我明白了。
下面是代碼:
namespace BestInvest.UserControls
{
public partial class CompleteComboBox : System.Windows.Forms.ComboBox
{
public event System.ComponentModel.CancelEventHandler NotInList;
private bool _limitToList = true;
private bool _inEditMode = false;
bool start;
public CompleteComboBox()
: base()
{
start = true;
this.Text = ClsConsts.InitializeTextForCombo;
}
[Category("Behavior")]
public bool LimitToList
{
get { return _limitToList; }
set { _limitToList = value; }
}
protected virtual void OnNotInList(System.ComponentModel.CancelEventArgs e)
{
if (NotInList != null)
{
NotInList(this, e);
}
}
protected override void OnTextChanged(System.EventArgs e)
{
if (_inEditMode)
{
string input = Text;
int index = FindString(input);
if (index >= 0)
{
_inEditMode = false;
SelectedIndex = index;
_inEditMode = true;
Select(input.Length, Text.Length);
//base.DroppedDown = true;
}
}
base.OnTextChanged(e);
}
protected override void OnValidating(System.ComponentModel.CancelEventArgs e)
{
if (this.LimitToList)
{
int pos = this.FindStringExact(this.Text);
if (pos == -1)
{
OnNotInList(e);
}
else
{
this.SelectedIndex = pos;
}
}
base.OnValidating(e);
}
protected override void OnKeyDown(System.Windows.Forms.KeyEventArgs e)
{
if (start)
{
base.DroppedDown = true;
//else
start = false;
}
if (e.KeyCode == Keys.Enter)
{
base.DroppedDown = false;
start = true;
}
_inEditMode = true;
base.OnKeyDown(e);
}
}
}
對不起,我不是很明白,你的意思是「不能正常工作」......什麼是預期的行爲和什麼是故障?請澄清! – Shnugo