diff --git a/Bin/SunnyUI.dll b/Bin/SunnyUI.dll index 4cf6c00f..e222ac60 100644 Binary files a/Bin/SunnyUI.dll and b/Bin/SunnyUI.dll differ diff --git a/Bin/SunnyUI.pdb b/Bin/SunnyUI.pdb index 7a6fc393..888438d2 100644 Binary files a/Bin/SunnyUI.pdb and b/Bin/SunnyUI.pdb differ diff --git a/SunnyUI.Demo/Bin/SunnyUI.Demo.exe b/SunnyUI.Demo/Bin/SunnyUI.Demo.exe index b6c69ac1..4bd01913 100644 Binary files a/SunnyUI.Demo/Bin/SunnyUI.Demo.exe and b/SunnyUI.Demo/Bin/SunnyUI.Demo.exe differ diff --git a/SunnyUI.Demo/Bin/SunnyUI.dll b/SunnyUI.Demo/Bin/SunnyUI.dll index 4cf6c00f..e222ac60 100644 Binary files a/SunnyUI.Demo/Bin/SunnyUI.dll and b/SunnyUI.Demo/Bin/SunnyUI.dll differ diff --git a/SunnyUI/Controls/UIImageListBox.cs b/SunnyUI/Controls/UIImageListBox.cs index b41cda5e..a2454c63 100644 --- a/SunnyUI/Controls/UIImageListBox.cs +++ b/SunnyUI/Controls/UIImageListBox.cs @@ -35,7 +35,6 @@ namespace Sunny.UI public sealed partial class UIImageListBox : UIPanel { private readonly ImageListBox listbox = new ImageListBox(); - private readonly UIPanel panel = new UIPanel(); private readonly UIScrollBar bar = new UIScrollBar(); public UIImageListBox() @@ -45,28 +44,18 @@ namespace Sunny.UI Padding = new Padding(2); - panel.Radius = 0; - panel.RadiusSides = UICornerRadiusSides.None; - panel.RectSides = ToolStripStatusLabelBorderSides.None; - panel.Parent = this; - panel.Width = 0; - panel.Dock = DockStyle.Right; - panel.Show(); - bar.ValueChanged += Bar_ValueChanged; - bar.Parent = panel; - bar.Dock = DockStyle.Fill; + bar.Width = SystemInformation.VerticalScrollBarWidth + 2; + bar.Parent = this; + bar.Dock = DockStyle.None; bar.Style = UIStyle.Custom; - bar.Show(); + bar.Visible = false; listbox.Parent = this; listbox.Dock = DockStyle.Fill; listbox.Show(); - listbox.panel = panel; listbox.Bar = bar; - panel.SendToBack(); - listbox.SelectedIndexChanged += Listbox_SelectedIndexChanged; listbox.SelectedValueChanged += Listbox_SelectedValueChanged; listbox.Click += Listbox_Click; @@ -74,6 +63,14 @@ namespace Sunny.UI listbox.BeforeDrawItem += Listbox_BeforeDrawItem; } + protected override void OnSizeChanged(EventArgs e) + { + base.OnSizeChanged(e); + bar.Top = 2; + bar.Height = Height - 4; + bar.Left = Width - bar.Width - 2; + } + private void Listbox_BeforeDrawItem(object sender, ListBox.ObjectCollection items, DrawItemEventArgs e) { if (Items.Count != LastCount) @@ -146,11 +143,6 @@ namespace Sunny.UI base.SetStyleColor(uiColor); if (uiColor.IsCustom()) return; - if (panel != null) - { - panel.FillColor = Color.White; - } - if (bar != null) { bar.ForeColor = uiColor.PrimaryColor; @@ -283,8 +275,6 @@ namespace Sunny.UI [DefaultValue(null)] public string TagString { get; set; } - public UIPanel panel { get; set; } - public UIScrollBar Bar { get => bar; @@ -312,38 +302,29 @@ namespace Sunny.UI protected override void OnSizeChanged(EventArgs e) { - if (!PanelVisible) - { - SetScrollInfo(); - } + SetScrollInfo(); } public void SetScrollInfo() { - if (Bar == null || panel == null) + if (Bar == null) { return; } - PanelVisible = true; var si = ScrollBarInfo.GetInfo(Handle); if (si.ScrollMax > 0) { Bar.Maximum = si.ScrollMax; - panel.Width = (si.ScrollMax > 0 && si.nMax > 0 && si.nPage > 0) ? SystemInformation.VerticalScrollBarWidth + 2 : 0; - panel.SendToBack(); + Bar.Visible = si.ScrollMax > 0 && si.nMax > 0 && si.nPage > 0; Bar.Value = si.nPos; } else { - panel.Width = 0; + Bar.Visible = false; } - - PanelVisible = false; } - private bool PanelVisible; - protected override void OnMeasureItem(MeasureItemEventArgs e) { e.ItemHeight = e.ItemHeight + ItemHeight; @@ -363,13 +344,6 @@ namespace Sunny.UI [Browsable(false)] public int Count => Items.Count; - protected override void WndProc(ref Message m) - { - base.WndProc(ref m); - //隐藏滚动条 - ScrollBarInfo.ShowScrollBar(Handle, 3, false);//0:horizontal,1:vertical,3:both - } - public void SelectedFirst() { if (Count > 0 && SelectedIndex < 0) @@ -382,7 +356,7 @@ namespace Sunny.UI { base.OnMouseWheel(e); - if (panel.Width > 0) + if (Bar.Visible) { var si = ScrollBarInfo.GetInfo(Handle); if (e.Delta > 10) diff --git a/SunnyUI/Controls/UIListBox.cs b/SunnyUI/Controls/UIListBox.cs index 8b064912..c7a1abc4 100644 --- a/SunnyUI/Controls/UIListBox.cs +++ b/SunnyUI/Controls/UIListBox.cs @@ -36,7 +36,6 @@ namespace Sunny.UI public sealed partial class UIListBox : UIPanel { private readonly ListBoxEx listbox = new ListBoxEx(); - private readonly UIPanel panel = new UIPanel(); private readonly UIScrollBar bar = new UIScrollBar(); public UIListBox() @@ -45,28 +44,18 @@ namespace Sunny.UI ShowText = false; Padding = new Padding(2); - panel.Radius = 0; - panel.RadiusSides = UICornerRadiusSides.None; - panel.RectSides = ToolStripStatusLabelBorderSides.None; - panel.Parent = this; - panel.Width = 0; - panel.Dock = DockStyle.Right; - panel.Show(); - bar.ValueChanged += Bar_ValueChanged; - bar.Parent = panel; - bar.Dock = DockStyle.Fill; + bar.Width = SystemInformation.VerticalScrollBarWidth + 2; + bar.Parent = this; + bar.Dock = DockStyle.None; bar.Style = UIStyle.Custom; - bar.Show(); + bar.Visible = false; listbox.Parent = this; listbox.Dock = DockStyle.Fill; listbox.Show(); - listbox.panel = panel; listbox.Bar = bar; - panel.SendToBack(); - listbox.SelectedIndexChanged += Listbox_SelectedIndexChanged; listbox.SelectedValueChanged += Listbox_SelectedValueChanged; listbox.Click += Listbox_Click; @@ -74,6 +63,14 @@ namespace Sunny.UI listbox.BeforeDrawItem += Listbox_BeforeDrawItem; } + protected override void OnSizeChanged(EventArgs e) + { + base.OnSizeChanged(e); + bar.Top = 2; + bar.Height = Height - 4; + bar.Left = Width - bar.Width - 2; + } + private void Listbox_BeforeDrawItem(object sender, ListBox.ObjectCollection items, DrawItemEventArgs e) { if (Items.Count != LastCount) @@ -137,11 +134,6 @@ namespace Sunny.UI bar.FillColor = Color.White; } - if (panel != null) - { - panel.FillColor = Color.White; - } - hoverColor = uiColor.TreeViewHoverColor; if (listbox != null) { @@ -246,8 +238,6 @@ namespace Sunny.UI { private UIScrollBar bar; - public UIPanel panel { get; set; } - [DefaultValue(null)] public string TagString { get; set; } @@ -281,38 +271,29 @@ namespace Sunny.UI protected override void OnSizeChanged(EventArgs e) { - if (!PanelVisible) - { - SetScrollInfo(); - } + SetScrollInfo(); } public void SetScrollInfo() { - if (Bar == null || panel == null) + if (Bar == null) { return; } - PanelVisible = true; var si = ScrollBarInfo.GetInfo(Handle); if (si.ScrollMax > 0) { Bar.Maximum = si.ScrollMax; - panel.Width = (si.ScrollMax > 0 && si.nMax > 0 && si.nPage > 0) ? SystemInformation.VerticalScrollBarWidth + 2 : 0; - panel.SendToBack(); + Bar.Visible = si.ScrollMax > 0 && si.nMax > 0 && si.nPage > 0; Bar.Value = si.nPos; } else { - panel.Width = 0; + Bar.Visible = false; } - - PanelVisible = false; } - private bool PanelVisible; - public string Version { get; } [DefaultValue(false)] @@ -352,17 +333,17 @@ namespace Sunny.UI set => SetStyle(value); } - protected override void WndProc(ref Message m) - { - base.WndProc(ref m); - //隐藏滚动条 - ScrollBarInfo.ShowScrollBar(Handle, 3, false);//0:horizontal,1:vertical,3:both - } + // protected override void WndProc(ref Message m) + // { + // base.WndProc(ref m); + // //隐藏滚动条 + // ScrollBarInfo.ShowScrollBar(Handle, 3, false);//0:horizontal,1:vertical,3:both + // } protected override void OnMouseWheel(MouseEventArgs e) { base.OnMouseWheel(e); - if (panel.Width > 0) + if (Bar.Visible) { var si = ScrollBarInfo.GetInfo(Handle); if (e.Delta > 10) @@ -532,15 +513,15 @@ namespace Sunny.UI { if (mouseIndex != value) { - if (lastIndex >= 0 && lastIndex != SelectedIndex) + if (lastIndex >= 0 && lastIndex >= 0 && lastIndex < Items.Count && lastIndex != SelectedIndex) { - OnDrawItem(new DrawItemEventArgs(this.CreateGraphics(), Font, GetItemRectangle(lastIndex), lastIndex, DrawItemState.Grayed)); + OnDrawItem(new DrawItemEventArgs(CreateGraphics(), Font, GetItemRectangle(lastIndex), lastIndex, DrawItemState.Grayed)); } mouseIndex = value; - if (mouseIndex >= 0 && mouseIndex != SelectedIndex) + if (mouseIndex >= 0 && mouseIndex >= 0 && mouseIndex < Items.Count && mouseIndex != SelectedIndex) { - OnDrawItem(new DrawItemEventArgs(this.CreateGraphics(), Font, GetItemRectangle(value), value, DrawItemState.HotLight)); + OnDrawItem(new DrawItemEventArgs(CreateGraphics(), Font, GetItemRectangle(value), value, DrawItemState.HotLight)); } lastIndex = mouseIndex; diff --git a/SunnyUI/Controls/UINavBar.cs b/SunnyUI/Controls/UINavBar.cs index 2cd79786..ceb79378 100644 --- a/SunnyUI/Controls/UINavBar.cs +++ b/SunnyUI/Controls/UINavBar.cs @@ -477,5 +477,117 @@ namespace Sunny.UI public bool StyleCustomMode { get; set; } public string Version { get; } + + public TreeNode CreateNode(string text, int pageIndex) + { + return CreateNode(new NavMenuItem(text, pageIndex)); + } + + public TreeNode CreateNode(UIPage page) + { + return CreateNode(new NavMenuItem(page.Text, page.PageIndex)); + } + + public TreeNode CreateNode(NavMenuItem item) + { + TreeNode node = new TreeNode(item.Text); + Nodes.Add(node); + SetNodeItem(node, item); + return node; + } + + public TreeNode CreateNode(string text, int imageIndex, int pageIndex) + { + return CreateNode(new NavMenuItem(text, pageIndex), imageIndex); + } + + public TreeNode CreateNode(UIPage page, int imageIndex) + { + return CreateNode(new NavMenuItem(page.Text, page.PageIndex), imageIndex); + } + + public TreeNode CreateNode(NavMenuItem item, int imageIndex) + { + TreeNode node = new TreeNode(item.Text); + Nodes.Add(node); + SetNodeItem(node, item); + node.ImageIndex = imageIndex; + return node; + } + + public TreeNode CreateNode(string text, int symbol, int symbolSize, int pageIndex) + { + return CreateNode(new NavMenuItem(text, pageIndex), symbol, symbolSize); + } + + public TreeNode CreateNode(UIPage page, int symbol, int symbolSize) + { + return CreateNode(new NavMenuItem(page.Text, page.PageIndex), symbol, symbolSize); + } + + public TreeNode CreateNode(NavMenuItem item, int symbol, int symbolSize) + { + TreeNode node = new TreeNode(item.Text); + Nodes.Add(node); + SetNodeItem(node, item); + MenuHelper.SetSymbol(node, symbol, symbolSize); + return node; + } + + public TreeNode CreateChildNode(TreeNode parent, string text, int pageIndex) + { + return CreateChildNode(parent, new NavMenuItem(text, pageIndex)); + } + + public TreeNode CreateChildNode(TreeNode parent, UIPage page) + { + return CreateChildNode(parent, new NavMenuItem(page.Text, page.PageIndex)); + } + + public TreeNode CreateChildNode(TreeNode parent, NavMenuItem item) + { + TreeNode childNode = new TreeNode(item.Text); + parent.Nodes.Add(childNode); + SetNodeItem(childNode, item); + return childNode; + } + + public TreeNode CreateChildNode(TreeNode parent, int imageIndex, string text, int pageIndex) + { + return CreateChildNode(parent, imageIndex, new NavMenuItem(text, pageIndex)); + } + + public TreeNode CreateChildNode(TreeNode parent, int imageIndex, UIPage page) + { + return CreateChildNode(parent, imageIndex, new NavMenuItem(page.Text, page.PageIndex)); + } + + public TreeNode CreateChildNode(TreeNode parent, int imageIndex, NavMenuItem item) + { + TreeNode childNode = new TreeNode(item.Text); + parent.Nodes.Add(childNode); + SetNodeItem(childNode, item); + childNode.ImageIndex = imageIndex; + return childNode; + } + + public TreeNode CreateChildNode(TreeNode parent, int symbol, int symbolSize, string text, int pageIndex) + { + return CreateChildNode(parent, symbol, symbolSize, new NavMenuItem(text, pageIndex)); + } + + public TreeNode CreateChildNode(TreeNode parent, int symbol, int symbolSize, UIPage page) + { + return CreateChildNode(parent, symbol, symbolSize, new NavMenuItem(page.Text, page.PageIndex)); + } + + public TreeNode CreateChildNode(TreeNode parent, int symbol, int symbolSize, NavMenuItem item) + { + TreeNode childNode = new TreeNode(item.Text); + parent.Nodes.Add(childNode); + SetNodeItem(childNode, item); + MenuHelper.SetSymbol(childNode, symbol, symbolSize); + return childNode; + } } } \ No newline at end of file diff --git a/SunnyUI/Controls/UINavMenu.cs b/SunnyUI/Controls/UINavMenu.cs index d964baad..8f430211 100644 --- a/SunnyUI/Controls/UINavMenu.cs +++ b/SunnyUI/Controls/UINavMenu.cs @@ -348,6 +348,11 @@ namespace Sunny.UI MenuHelper.SetPageIndex(node, pageIndex); } + public void SetNodeSymbol(TreeNode node, int symbol, int symbolSize = 24) + { + MenuHelper.SetSymbol(node, symbol, symbolSize); + } + protected override void OnDrawNode(DrawTreeNodeEventArgs e) { if (BorderStyle != BorderStyle.None) @@ -411,7 +416,7 @@ namespace Sunny.UI } else { - if (e.Selected() && e.Node.SelectedImageIndex >= 0 && e.Node.SelectedImageIndex < ImageList.Images.Count) + if (TreeNodeSelected(e) && e.Node.SelectedImageIndex >= 0 && e.Node.SelectedImageIndex < ImageList.Images.Count) e.Graphics.DrawImage(ImageList.Images[e.Node.SelectedImageIndex], imageLeft, e.Bounds.Y + (e.Bounds.Height - ImageList.ImageSize.Height) / 2); else e.Graphics.DrawImage(ImageList.Images[e.Node.ImageIndex], imageLeft, e.Bounds.Y + (e.Bounds.Height - ImageList.ImageSize.Height) / 2); @@ -436,6 +441,12 @@ namespace Sunny.UI } } + private bool TreeNodeSelected(DrawTreeNodeEventArgs e) + { + return e.State == TreeNodeStates.Selected || e.State == TreeNodeStates.Focused || + e.State == (TreeNodeStates.Focused | TreeNodeStates.Selected); + } + [Description("展开节点后选中第一个子节点"), DefaultValue(true)] public bool ExpandSelectFirst { get; set; } = true; @@ -596,85 +607,116 @@ namespace Sunny.UI //隐藏滚动条 ScrollBarInfo.ShowScrollBar(Handle, 3, false);//0:horizontal,1:vertical,3:both } - } - public static class TreeViewHelper - { - public static bool Selected(this DrawTreeNodeEventArgs e) + public TreeNode CreateNode(string text, int pageIndex) { - return e.State == TreeNodeStates.Selected || e.State == TreeNodeStates.Focused || - e.State == (TreeNodeStates.Focused | TreeNodeStates.Selected); + return CreateNode(new NavMenuItem(text, pageIndex)); } - public static TreeNode CreateNode(this UINavMenu navMenu, string text, int pageIndex) + public TreeNode CreateNode(UIPage page) { - return navMenu.CreateNode(new NavMenuItem(text, pageIndex)); + return CreateNode(new NavMenuItem(page.Text, page.PageIndex)); } - public static TreeNode CreateNode(this UINavMenu navMenu, UIPage page) - { - return navMenu.CreateNode(new NavMenuItem(page.Text, page.PageIndex)); - } - - public static TreeNode CreateNode(this UINavMenu navMenu, NavMenuItem item) + public TreeNode CreateNode(NavMenuItem item) { TreeNode node = new TreeNode(item.Text); - navMenu.Nodes.Add(node); - navMenu.SetNodeItem(node, item); + Nodes.Add(node); + SetNodeItem(node, item); return node; } - public static TreeNode CreateNode(this UINavBar navBar, string text, int pageIndex) + public TreeNode CreateNode(string text, int imageIndex, int pageIndex) { - return navBar.CreateNode(new NavMenuItem(text, pageIndex)); + return CreateNode(new NavMenuItem(text, pageIndex), imageIndex); } - public static TreeNode CreateNode(this UINavBar navBar, UIPage page) + public TreeNode CreateNode(UIPage page, int imageIndex) { - return navBar.CreateNode(new NavMenuItem(page.Text, page.PageIndex)); + return CreateNode(new NavMenuItem(page.Text, page.PageIndex), imageIndex); } - public static TreeNode CreateNode(this UINavBar navBar, NavMenuItem item) + public TreeNode CreateNode(NavMenuItem item, int imageIndex) { TreeNode node = new TreeNode(item.Text); - navBar.Nodes.Add(node); - navBar.SetNodeItem(node, item); + Nodes.Add(node); + SetNodeItem(node, item); + node.ImageIndex = imageIndex; return node; } - public static TreeNode CreateChildNode(this UINavMenu navMenu, TreeNode parent, string text, int pageIndex) + public TreeNode CreateNode(string text, int symbol, int symbolSize, int pageIndex) { - return navMenu.CreateChildNode(parent, new NavMenuItem(text, pageIndex)); + return CreateNode(new NavMenuItem(text, pageIndex), symbol, symbolSize); } - public static TreeNode CreateChildNode(this UINavMenu navMenu, TreeNode parent, UIPage page) + public TreeNode CreateNode(UIPage page, int symbol, int symbolSize) { - return navMenu.CreateChildNode(parent, new NavMenuItem(page.Text, page.PageIndex)); + return CreateNode(new NavMenuItem(page.Text, page.PageIndex), symbol, symbolSize); } - public static TreeNode CreateChildNode(this UINavMenu navMenu, TreeNode parent, NavMenuItem item) + public TreeNode CreateNode(NavMenuItem item, int symbol, int symbolSize) + { + TreeNode node = new TreeNode(item.Text); + Nodes.Add(node); + SetNodeItem(node, item); + MenuHelper.SetSymbol(node, symbol, symbolSize); + return node; + } + + public TreeNode CreateChildNode(TreeNode parent, string text, int pageIndex) + { + return CreateChildNode(parent, new NavMenuItem(text, pageIndex)); + } + + public TreeNode CreateChildNode(TreeNode parent, UIPage page) + { + return CreateChildNode(parent, new NavMenuItem(page.Text, page.PageIndex)); + } + + public TreeNode CreateChildNode(TreeNode parent, NavMenuItem item) { TreeNode childNode = new TreeNode(item.Text); parent.Nodes.Add(childNode); - navMenu.SetNodeItem(childNode, item); + SetNodeItem(childNode, item); return childNode; } - public static TreeNode CreateChildNode(this UINavBar navBar, TreeNode parent, string text, int pageIndex) + public TreeNode CreateChildNode(TreeNode parent, int imageIndex, string text, int pageIndex) { - return navBar.CreateChildNode(parent, new NavMenuItem(text, pageIndex)); + return CreateChildNode(parent, imageIndex, new NavMenuItem(text, pageIndex)); } - public static TreeNode CreateChildNode(this UINavBar navBar, TreeNode parent, UIPage page) + public TreeNode CreateChildNode(TreeNode parent, int imageIndex, UIPage page) { - return navBar.CreateChildNode(parent, new NavMenuItem(page.Text, page.PageIndex)); + return CreateChildNode(parent, imageIndex, new NavMenuItem(page.Text, page.PageIndex)); } - public static TreeNode CreateChildNode(this UINavBar navBar, TreeNode parent, NavMenuItem item) + public TreeNode CreateChildNode(TreeNode parent, int imageIndex, NavMenuItem item) { TreeNode childNode = new TreeNode(item.Text); parent.Nodes.Add(childNode); - navBar.SetNodeItem(childNode, item); + SetNodeItem(childNode, item); + childNode.ImageIndex = imageIndex; + return childNode; + } + + public TreeNode CreateChildNode(TreeNode parent, int symbol, int symbolSize, string text, int pageIndex) + { + return CreateChildNode(parent, symbol, symbolSize, new NavMenuItem(text, pageIndex)); + } + + public TreeNode CreateChildNode(TreeNode parent, int symbol, int symbolSize, UIPage page) + { + return CreateChildNode(parent, symbol, symbolSize, new NavMenuItem(page.Text, page.PageIndex)); + } + + public TreeNode CreateChildNode(TreeNode parent, int symbol, int symbolSize, NavMenuItem item) + { + TreeNode childNode = new TreeNode(item.Text); + parent.Nodes.Add(childNode); + SetNodeItem(childNode, item); + MenuHelper.SetSymbol(childNode, symbol, symbolSize); return childNode; } } diff --git a/SunnyUI/Controls/UITreeView.cs b/SunnyUI/Controls/UITreeView.cs index 882516f4..28816a5f 100644 --- a/SunnyUI/Controls/UITreeView.cs +++ b/SunnyUI/Controls/UITreeView.cs @@ -393,7 +393,7 @@ namespace Sunny.UI } else { - if (e.Selected() && e.Node.SelectedImageIndex >= 0 && e.Node.SelectedImageIndex < ImageList.Images.Count) + if (TreeNodeSelected(e) && e.Node.SelectedImageIndex >= 0 && e.Node.SelectedImageIndex < ImageList.Images.Count) e.Graphics.DrawImage(ImageList.Images[e.Node.SelectedImageIndex], imageLeft, e.Bounds.Y + (e.Bounds.Height - ImageList.ImageSize.Height) / 2); else e.Graphics.DrawImage(ImageList.Images[e.Node.ImageIndex], imageLeft, e.Bounds.Y + (e.Bounds.Height - ImageList.ImageSize.Height) / 2); @@ -482,6 +482,12 @@ namespace Sunny.UI } } + private bool TreeNodeSelected(DrawTreeNodeEventArgs e) + { + return e.State == TreeNodeStates.Selected || e.State == TreeNodeStates.Focused || + e.State == (TreeNodeStates.Focused | TreeNodeStates.Selected); + } + public string Version { get; } protected override void OnNodeMouseClick(TreeNodeMouseClickEventArgs e)