* UIComboBox: 过滤时删除字符串前面、后面的空格

This commit is contained in:
Sunny 2022-11-03 16:49:45 +08:00
parent 1f11be45fd
commit 655c098177
2 changed files with 43 additions and 6 deletions

View File

@ -30,6 +30,7 @@
* 2022-05-04: V3.1.8 ValueMember绑定值的显示 * 2022-05-04: V3.1.8 ValueMember绑定值的显示
* 2022-05-24: V3.1.9 Selceted=-1 * 2022-05-24: V3.1.9 Selceted=-1
* 2022-08-25: V3.2.3 * 2022-08-25: V3.2.3
* 2022-11-03: V3.2.6
******************************************************************************/ ******************************************************************************/
using System; using System;
@ -330,6 +331,10 @@ namespace Sunny.UI
if (Text.IsValid()) if (Text.IsValid())
{ {
string filterText = Text;
if (TrimFilter)
filterText = filterText.Trim();
filterForm.ListBox.Items.Clear(); filterForm.ListBox.Items.Clear();
filterList.Clear(); filterList.Clear();
@ -337,7 +342,7 @@ namespace Sunny.UI
{ {
foreach (var item in Items) foreach (var item in Items)
{ {
if (item.ToString().Contains(Text)) if (item.ToString().Contains(filterText))
{ {
filterList.Add(item.ToString()); filterList.Add(item.ToString());
if (filterList.Count > FilterMaxCount) break; if (filterList.Count > FilterMaxCount) break;
@ -350,7 +355,7 @@ namespace Sunny.UI
{ {
for (int i = 0; i < Items.Count; i++) for (int i = 0; i < Items.Count; i++)
{ {
if (GetItemText(dataManager.List[i]).ToString().Contains(Text)) if (GetItemText(dataManager.List[i]).ToString().Contains(filterText))
{ {
filterList.Add(dataManager.List[i]); filterList.Add(dataManager.List[i]);
if (filterList.Count > FilterMaxCount) break; if (filterList.Count > FilterMaxCount) break;
@ -374,6 +379,10 @@ namespace Sunny.UI
} }
} }
[DefaultValue(false)]
[Description("过滤时删除字符串前面、后面的空格"), Category("SunnyUI")]
public bool TrimFilter { get; set; }
public void HideFilterForm() public void HideFilterForm()
{ {
if (FilterItemForm.Visible) if (FilterItemForm.Visible)

View File

@ -91,6 +91,32 @@ namespace Sunny.UI
selectedHighColor = UIStyles.Blue.NavMenuMenuSelectedColor; selectedHighColor = UIStyles.Blue.NavMenuMenuSelectedColor;
} }
private int scrollBarWidth = 0;
[DefaultValue(0), Category("SunnyUI"), Description("垂直滚动条宽度,最小为原生滚动条宽度")]
public int ScrollBarWidth
{
get => scrollBarWidth;
set
{
scrollBarWidth = value;
SetScrollInfo();
}
}
private int scrollBarHandleWidth = 6;
[DefaultValue(6), Category("SunnyUI"), Description("垂直滚动条滑块宽度,最小为原生滚动条宽度")]
public int ScrollBarHandleWidth
{
get => scrollBarHandleWidth;
set
{
scrollBarHandleWidth = value;
if (Bar != null) Bar.FillWidth = value;
}
}
/// <summary> /// <summary>
/// 禁止控件跟随窗体缩放 /// 禁止控件跟随窗体缩放
/// </summary> /// </summary>
@ -663,7 +689,7 @@ namespace Sunny.UI
if (TreeNodeSymbols.ContainsKey(e.Node) && TreeNodeSymbols[e.Node].Count > 0) if (TreeNodeSymbols.ContainsKey(e.Node) && TreeNodeSymbols[e.Node].Count > 0)
{ {
int symbolRight = Width - (ScrollBarVisible ? ScrollBarInfo.VerticalScrollBarWidth() : 0) - 3; int symbolRight = Width - (ScrollBarVisible ? Bar.Width : 0) - 3;
if (e.Node.Nodes.Count > 0) symbolRight -= 32; if (e.Node.Nodes.Count > 0) symbolRight -= 32;
int firstLeft = symbolRight - TreeNodeSymbols[e.Node].Count * 32; int firstLeft = symbolRight - TreeNodeSymbols[e.Node].Count * 32;
@ -680,7 +706,7 @@ namespace Sunny.UI
if (TreeNodeSymbols.ContainsKey(e.Node) && TreeNodeSymbols[e.Node].Count > 0) if (TreeNodeSymbols.ContainsKey(e.Node) && TreeNodeSymbols[e.Node].Count > 0)
{ {
int symbolRight = Width - (ScrollBarVisible ? ScrollBarInfo.VerticalScrollBarWidth() : 0) - 3; int symbolRight = Width - (ScrollBarVisible ? Bar.Width : 0) - 3;
if (e.Node.Nodes.Count > 0) symbolRight -= 32; if (e.Node.Nodes.Count > 0) symbolRight -= 32;
int firstLeft = symbolRight - TreeNodeSymbols[e.Node].Count * 32; int firstLeft = symbolRight - TreeNodeSymbols[e.Node].Count * 32;
@ -729,7 +755,7 @@ namespace Sunny.UI
{ {
SizeF tipsSize = e.Graphics.MeasureString(MenuHelper.GetTipsText(e.Node), TempFont); SizeF tipsSize = e.Graphics.MeasureString(MenuHelper.GetTipsText(e.Node), TempFont);
float sfMax = Math.Max(tipsSize.Width, tipsSize.Height) + 1; float sfMax = Math.Max(tipsSize.Width, tipsSize.Height) + 1;
float tipsLeft = Width - (ScrollBarVisible ? ScrollBarInfo.VerticalScrollBarWidth() : 0) - sfMax - sfMax; float tipsLeft = Width - (ScrollBarVisible ? Bar.Width : 0) - sfMax - sfMax;
if (e.Node.Nodes.Count > 0) tipsLeft -= 24; if (e.Node.Nodes.Count > 0) tipsLeft -= 24;
float tipsTop = e.Bounds.Y + (ItemHeight - sfMax) / 2; float tipsTop = e.Bounds.Y + (ItemHeight - sfMax) / 2;
@ -829,7 +855,7 @@ namespace Sunny.UI
if (e.Node != null && TreeNodeSymbols.ContainsKey(e.Node) && TreeNodeSymbols[e.Node].Count > 0) if (e.Node != null && TreeNodeSymbols.ContainsKey(e.Node) && TreeNodeSymbols[e.Node].Count > 0)
{ {
int symbolRight = Width - (ScrollBarVisible ? ScrollBarInfo.VerticalScrollBarWidth() : 0) - 3; int symbolRight = Width - (ScrollBarVisible ? Bar.Width : 0) - 3;
if (e.Node.Nodes.Count > 0) symbolRight -= 32; if (e.Node.Nodes.Count > 0) symbolRight -= 32;
int firstLeft = symbolRight - TreeNodeSymbols[e.Node].Count * 32; int firstLeft = symbolRight - TreeNodeSymbols[e.Node].Count * 32;
if (e.X >= firstLeft && e.X < symbolRight) if (e.X >= firstLeft && e.X < symbolRight)
@ -910,10 +936,12 @@ namespace Sunny.UI
return; return;
} }
int barWidth = Math.Max(ScrollBarInfo.VerticalScrollBarWidth(), ScrollBarWidth);
var si = ScrollBarInfo.GetInfo(Handle); var si = ScrollBarInfo.GetInfo(Handle);
Bar.Maximum = si.ScrollMax; Bar.Maximum = si.ScrollMax;
Bar.Visible = si.ScrollMax > 0 && si.nMax > 0 && si.nPage > 0; Bar.Visible = si.ScrollMax > 0 && si.nMax > 0 && si.nPage > 0;
Bar.Value = si.nPos; Bar.Value = si.nPos;
Bar.Width = barWidth + 1;
Bar.BringToFront(); Bar.BringToFront();
if (ScrollBarVisible != Bar.Visible) if (ScrollBarVisible != Bar.Visible)