* UIComboBox: 根据Text自动选中SelectIndex

This commit is contained in:
Sunny 2022-04-13 19:06:28 +08:00
parent 01ce6f5eaf
commit a42cd389fc

View File

@ -23,9 +23,11 @@
* 2021-08-03: V3.0.5 Items.Clear后清除显示
* 2021-08-15: V3.0.6
* 2022-01-16: V3.1.0
* 2022-04-13: V3.1.3 Text自动选中SelectIndex
******************************************************************************/
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Design;
@ -43,8 +45,8 @@ namespace Sunny.UI
{
InitializeComponent();
ListBox.SelectedIndexChanged += Box_SelectedIndexChanged;
ListBox.DataSourceChanged += Box_DataSourceChanged;
ListBox.DisplayMemberChanged += Box_DisplayMemberChanged;
//ListBox.DataSourceChanged += Box_DataSourceChanged;
//ListBox.DisplayMemberChanged += Box_DisplayMemberChanged;
ListBox.ValueMemberChanged += Box_ValueMemberChanged;
ListBox.SelectedValueChanged += ListBox_SelectedValueChanged;
ListBox.ItemsClear += ListBox_ItemsClear;
@ -54,6 +56,18 @@ namespace Sunny.UI
fullControlSelect = true;
}
private void InitStrings()
{
if (DropDownStyle == UIDropDownStyle.DropDown && DataSource != null && DisplayMember.IsValid())
{
strings.Clear();
for (int i = 0; i < Items.Count; i++)
{
strings.Add(GetItemText(Items[i]));
}
}
}
public Control ExToolTipControl()
{
return edit;
@ -106,6 +120,17 @@ namespace Sunny.UI
private void Edit_TextChanged(object sender, EventArgs e)
{
TextChanged?.Invoke(this, e);
if (Text.IsValid() && DropDownStyle == UIDropDownStyle.DropDown && !SelectTextChange)
{
if (DataSource == null)
{
SelectedIndex = Items.IndexOf(Text);
}
else
{
SelectedIndex = strings.IndexOf(Text);
}
}
}
private void ListBox_SelectedValueChanged(object sender, EventArgs e)
@ -121,16 +146,23 @@ namespace Sunny.UI
private void Box_DisplayMemberChanged(object sender, EventArgs e)
{
DisplayMemberChanged?.Invoke(this, e);
InitStrings();
}
private void Box_DataSourceChanged(object sender, EventArgs e)
{
DataSourceChanged?.Invoke(this, e);
InitStrings();
}
private bool SelectTextChange;
private void Box_SelectedIndexChanged(object sender, EventArgs e)
{
SelectTextChange = true;
if (ListBox.SelectedItem != null)
Text = ListBox.GetItemText(ListBox.SelectedItem);
SelectTextChange = false;
SelectedIndexChanged?.Invoke(this, e);
}
@ -199,11 +231,15 @@ namespace Sunny.UI
UIComboBox_ButtonClick(this, EventArgs.Empty);
}
List<string> strings = new List<string>();
private void UIComboBox_ButtonClick(object sender, EventArgs e)
{
if (Items.Count > 0)
{
ItemForm.Show(this, new Size(DropDownWidth < Width ? Width : DropDownWidth, CalcItemFormHeight()));
}
}
public override void SetStyleColor(UIBaseStyle uiColor)
{
@ -214,7 +250,11 @@ namespace Sunny.UI
public object DataSource
{
get => ListBox.DataSource;
set => ListBox.DataSource = value;
set
{
ListBox.DataSource = value;
Box_DataSourceChanged(this, EventArgs.Empty);
}
}
[DefaultValue(150)]
@ -273,7 +313,11 @@ namespace Sunny.UI
public string DisplayMember
{
get => ListBox.DisplayMember;
set => ListBox.DisplayMember = value;
set
{
ListBox.DisplayMember = value;
Box_DisplayMemberChanged(this, EventArgs.Empty);
}
}
[Description("获取或设置指示显示值的方式的格式说明符字符。"), Category("SunnyUI")]