diff --git a/SunnyUI/Controls/DropItem/UIComboBoxItem.cs b/SunnyUI/Controls/DropItem/UIComboBoxItem.cs
index 953e1325..7270005c 100644
--- a/SunnyUI/Controls/DropItem/UIComboBoxItem.cs
+++ b/SunnyUI/Controls/DropItem/UIComboBoxItem.cs
@@ -44,9 +44,15 @@ namespace Sunny.UI
private void ListBox_Click(object sender, EventArgs e)
{
- Close();
+ if (listBox.SelectedIndex >= 0)
+ {
+ BeforeListClick?.Invoke(listBox.SelectedIndex, EventArgs.Empty);
+ Close();
+ }
}
+ public event EventHandler BeforeListClick;
+
///
/// 设置边框颜色
///
diff --git a/SunnyUI/Controls/UIComboBox.cs b/SunnyUI/Controls/UIComboBox.cs
index e8681abb..934b1ee6 100644
--- a/SunnyUI/Controls/UIComboBox.cs
+++ b/SunnyUI/Controls/UIComboBox.cs
@@ -46,19 +46,30 @@ namespace Sunny.UI
{
InitializeComponent();
ListBox.SelectedIndexChanged += Box_SelectedIndexChanged;
- //ListBox.DataSourceChanged += Box_DataSourceChanged;
- //ListBox.DisplayMemberChanged += Box_DisplayMemberChanged;
ListBox.ValueMemberChanged += Box_ValueMemberChanged;
ListBox.SelectedValueChanged += ListBox_SelectedValueChanged;
ListBox.ItemsClear += ListBox_ItemsClear;
ListBox.ItemsRemove += ListBox_ItemsRemove;
+ filterForm.BeforeListClick += ListBox_Click;
+
edit.TextChanged += Edit_TextChanged;
edit.KeyDown += Edit_KeyDown;
DropDownWidth = 150;
fullControlSelect = true;
}
+ private void ListBox_Click(object sender, EventArgs e)
+ {
+ SelectTextChange = true;
+ filterSelectedItem = filterList[(int)sender];
+ filterSelectedValue = GetItemText(filterSelectedItem);
+ Text = filterSelectedValue.ToString();
+ edit.SelectionStart = Text.Length;
+ SelectedValueChanged?.Invoke(this, EventArgs.Empty);
+ SelectTextChange = false;
+ }
+
private void ShowDropDownFilter()
{
FilterItemForm.AutoClose = false;
@@ -105,7 +116,9 @@ namespace Sunny.UI
if (cnt > 0 && idx >= 0 && idx < cnt)
{
SelectTextChange = true;
- Text = filterForm.ListBox.GetItemText(filterForm.ListBox.Items[idx]);
+ filterSelectedItem = filterList[idx];
+ filterSelectedValue = GetItemText(filterSelectedItem);
+ Text = filterSelectedValue.ToString();
edit.SelectionStart = Text.Length;
SelectedValueChanged?.Invoke(this, EventArgs.Empty);
SelectTextChange = false;
@@ -140,6 +153,8 @@ namespace Sunny.UI
}
}
+ private object filterSelectedItem;
+ private object filterSelectedValue;
private bool showFilter;
[DefaultValue(false)]
@@ -171,7 +186,7 @@ namespace Sunny.UI
CurrencyManager dataManager;
- private void InitStrings()
+ private void SetDataConnection()
{
if (DropDownStyle == UIDropDownStyle.DropDown && DataSource != null && DisplayMember.IsValid())
{
@@ -258,14 +273,16 @@ namespace Sunny.UI
filterForm.ListBox.Items.Clear();
if (Text.IsValid())
{
+ filterList.Clear();
+
if (DataSource == null)
{
foreach (var item in Items)
{
if (item.ToString().Contains(Text))
{
- filterForm.ListBox.Items.Add(item.ToString());
- if (filterForm.ListBox.Items.Count > FilterMaxCount) break;
+ filterList.Add(item.ToString());
+ if (filterList.Count > FilterMaxCount) break;
}
}
}
@@ -273,29 +290,36 @@ namespace Sunny.UI
{
if (dataManager != null)
{
- List