更新UIListBox消息处理Bug

This commit is contained in:
sunny 2020-05-27 11:38:28 +08:00
parent a50b47626d
commit fa512aee15
9 changed files with 241 additions and 126 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -35,7 +35,6 @@ namespace Sunny.UI
public sealed partial class UIImageListBox : UIPanel public sealed partial class UIImageListBox : UIPanel
{ {
private readonly ImageListBox listbox = new ImageListBox(); private readonly ImageListBox listbox = new ImageListBox();
private readonly UIPanel panel = new UIPanel();
private readonly UIScrollBar bar = new UIScrollBar(); private readonly UIScrollBar bar = new UIScrollBar();
public UIImageListBox() public UIImageListBox()
@ -45,28 +44,18 @@ namespace Sunny.UI
Padding = new Padding(2); 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.ValueChanged += Bar_ValueChanged;
bar.Parent = panel; bar.Width = SystemInformation.VerticalScrollBarWidth + 2;
bar.Dock = DockStyle.Fill; bar.Parent = this;
bar.Dock = DockStyle.None;
bar.Style = UIStyle.Custom; bar.Style = UIStyle.Custom;
bar.Show(); bar.Visible = false;
listbox.Parent = this; listbox.Parent = this;
listbox.Dock = DockStyle.Fill; listbox.Dock = DockStyle.Fill;
listbox.Show(); listbox.Show();
listbox.panel = panel;
listbox.Bar = bar; listbox.Bar = bar;
panel.SendToBack();
listbox.SelectedIndexChanged += Listbox_SelectedIndexChanged; listbox.SelectedIndexChanged += Listbox_SelectedIndexChanged;
listbox.SelectedValueChanged += Listbox_SelectedValueChanged; listbox.SelectedValueChanged += Listbox_SelectedValueChanged;
listbox.Click += Listbox_Click; listbox.Click += Listbox_Click;
@ -74,6 +63,14 @@ namespace Sunny.UI
listbox.BeforeDrawItem += Listbox_BeforeDrawItem; 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) private void Listbox_BeforeDrawItem(object sender, ListBox.ObjectCollection items, DrawItemEventArgs e)
{ {
if (Items.Count != LastCount) if (Items.Count != LastCount)
@ -146,11 +143,6 @@ namespace Sunny.UI
base.SetStyleColor(uiColor); base.SetStyleColor(uiColor);
if (uiColor.IsCustom()) return; if (uiColor.IsCustom()) return;
if (panel != null)
{
panel.FillColor = Color.White;
}
if (bar != null) if (bar != null)
{ {
bar.ForeColor = uiColor.PrimaryColor; bar.ForeColor = uiColor.PrimaryColor;
@ -283,8 +275,6 @@ namespace Sunny.UI
[DefaultValue(null)] [DefaultValue(null)]
public string TagString { get; set; } public string TagString { get; set; }
public UIPanel panel { get; set; }
public UIScrollBar Bar public UIScrollBar Bar
{ {
get => bar; get => bar;
@ -312,38 +302,29 @@ namespace Sunny.UI
protected override void OnSizeChanged(EventArgs e) protected override void OnSizeChanged(EventArgs e)
{ {
if (!PanelVisible) SetScrollInfo();
{
SetScrollInfo();
}
} }
public void SetScrollInfo() public void SetScrollInfo()
{ {
if (Bar == null || panel == null) if (Bar == null)
{ {
return; return;
} }
PanelVisible = true;
var si = ScrollBarInfo.GetInfo(Handle); var si = ScrollBarInfo.GetInfo(Handle);
if (si.ScrollMax > 0) if (si.ScrollMax > 0)
{ {
Bar.Maximum = si.ScrollMax; Bar.Maximum = si.ScrollMax;
panel.Width = (si.ScrollMax > 0 && si.nMax > 0 && si.nPage > 0) ? SystemInformation.VerticalScrollBarWidth + 2 : 0; Bar.Visible = si.ScrollMax > 0 && si.nMax > 0 && si.nPage > 0;
panel.SendToBack();
Bar.Value = si.nPos; Bar.Value = si.nPos;
} }
else else
{ {
panel.Width = 0; Bar.Visible = false;
} }
PanelVisible = false;
} }
private bool PanelVisible;
protected override void OnMeasureItem(MeasureItemEventArgs e) protected override void OnMeasureItem(MeasureItemEventArgs e)
{ {
e.ItemHeight = e.ItemHeight + ItemHeight; e.ItemHeight = e.ItemHeight + ItemHeight;
@ -363,13 +344,6 @@ namespace Sunny.UI
[Browsable(false)] [Browsable(false)]
public int Count => Items.Count; 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() public void SelectedFirst()
{ {
if (Count > 0 && SelectedIndex < 0) if (Count > 0 && SelectedIndex < 0)
@ -382,7 +356,7 @@ namespace Sunny.UI
{ {
base.OnMouseWheel(e); base.OnMouseWheel(e);
if (panel.Width > 0) if (Bar.Visible)
{ {
var si = ScrollBarInfo.GetInfo(Handle); var si = ScrollBarInfo.GetInfo(Handle);
if (e.Delta > 10) if (e.Delta > 10)

View File

@ -36,7 +36,6 @@ namespace Sunny.UI
public sealed partial class UIListBox : UIPanel public sealed partial class UIListBox : UIPanel
{ {
private readonly ListBoxEx listbox = new ListBoxEx(); private readonly ListBoxEx listbox = new ListBoxEx();
private readonly UIPanel panel = new UIPanel();
private readonly UIScrollBar bar = new UIScrollBar(); private readonly UIScrollBar bar = new UIScrollBar();
public UIListBox() public UIListBox()
@ -45,28 +44,18 @@ namespace Sunny.UI
ShowText = false; ShowText = false;
Padding = new Padding(2); 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.ValueChanged += Bar_ValueChanged;
bar.Parent = panel; bar.Width = SystemInformation.VerticalScrollBarWidth + 2;
bar.Dock = DockStyle.Fill; bar.Parent = this;
bar.Dock = DockStyle.None;
bar.Style = UIStyle.Custom; bar.Style = UIStyle.Custom;
bar.Show(); bar.Visible = false;
listbox.Parent = this; listbox.Parent = this;
listbox.Dock = DockStyle.Fill; listbox.Dock = DockStyle.Fill;
listbox.Show(); listbox.Show();
listbox.panel = panel;
listbox.Bar = bar; listbox.Bar = bar;
panel.SendToBack();
listbox.SelectedIndexChanged += Listbox_SelectedIndexChanged; listbox.SelectedIndexChanged += Listbox_SelectedIndexChanged;
listbox.SelectedValueChanged += Listbox_SelectedValueChanged; listbox.SelectedValueChanged += Listbox_SelectedValueChanged;
listbox.Click += Listbox_Click; listbox.Click += Listbox_Click;
@ -74,6 +63,14 @@ namespace Sunny.UI
listbox.BeforeDrawItem += Listbox_BeforeDrawItem; 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) private void Listbox_BeforeDrawItem(object sender, ListBox.ObjectCollection items, DrawItemEventArgs e)
{ {
if (Items.Count != LastCount) if (Items.Count != LastCount)
@ -137,11 +134,6 @@ namespace Sunny.UI
bar.FillColor = Color.White; bar.FillColor = Color.White;
} }
if (panel != null)
{
panel.FillColor = Color.White;
}
hoverColor = uiColor.TreeViewHoverColor; hoverColor = uiColor.TreeViewHoverColor;
if (listbox != null) if (listbox != null)
{ {
@ -246,8 +238,6 @@ namespace Sunny.UI
{ {
private UIScrollBar bar; private UIScrollBar bar;
public UIPanel panel { get; set; }
[DefaultValue(null)] [DefaultValue(null)]
public string TagString { get; set; } public string TagString { get; set; }
@ -281,38 +271,29 @@ namespace Sunny.UI
protected override void OnSizeChanged(EventArgs e) protected override void OnSizeChanged(EventArgs e)
{ {
if (!PanelVisible) SetScrollInfo();
{
SetScrollInfo();
}
} }
public void SetScrollInfo() public void SetScrollInfo()
{ {
if (Bar == null || panel == null) if (Bar == null)
{ {
return; return;
} }
PanelVisible = true;
var si = ScrollBarInfo.GetInfo(Handle); var si = ScrollBarInfo.GetInfo(Handle);
if (si.ScrollMax > 0) if (si.ScrollMax > 0)
{ {
Bar.Maximum = si.ScrollMax; Bar.Maximum = si.ScrollMax;
panel.Width = (si.ScrollMax > 0 && si.nMax > 0 && si.nPage > 0) ? SystemInformation.VerticalScrollBarWidth + 2 : 0; Bar.Visible = si.ScrollMax > 0 && si.nMax > 0 && si.nPage > 0;
panel.SendToBack();
Bar.Value = si.nPos; Bar.Value = si.nPos;
} }
else else
{ {
panel.Width = 0; Bar.Visible = false;
} }
PanelVisible = false;
} }
private bool PanelVisible;
public string Version { get; } public string Version { get; }
[DefaultValue(false)] [DefaultValue(false)]
@ -352,17 +333,17 @@ namespace Sunny.UI
set => SetStyle(value); set => SetStyle(value);
} }
protected override void WndProc(ref Message m) // protected override void WndProc(ref Message m)
{ // {
base.WndProc(ref m); // base.WndProc(ref m);
//隐藏滚动条 // //隐藏滚动条
ScrollBarInfo.ShowScrollBar(Handle, 3, false);//0:horizontal,1:vertical,3:both // ScrollBarInfo.ShowScrollBar(Handle, 3, false);//0:horizontal,1:vertical,3:both
} // }
protected override void OnMouseWheel(MouseEventArgs e) protected override void OnMouseWheel(MouseEventArgs e)
{ {
base.OnMouseWheel(e); base.OnMouseWheel(e);
if (panel.Width > 0) if (Bar.Visible)
{ {
var si = ScrollBarInfo.GetInfo(Handle); var si = ScrollBarInfo.GetInfo(Handle);
if (e.Delta > 10) if (e.Delta > 10)
@ -532,15 +513,15 @@ namespace Sunny.UI
{ {
if (mouseIndex != value) 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; 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; lastIndex = mouseIndex;

View File

@ -477,5 +477,117 @@ namespace Sunny.UI
public bool StyleCustomMode { get; set; } public bool StyleCustomMode { get; set; }
public string Version { get; } 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;
}
} }
} }

View File

@ -348,6 +348,11 @@ namespace Sunny.UI
MenuHelper.SetPageIndex(node, pageIndex); 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) protected override void OnDrawNode(DrawTreeNodeEventArgs e)
{ {
if (BorderStyle != BorderStyle.None) if (BorderStyle != BorderStyle.None)
@ -411,7 +416,7 @@ namespace Sunny.UI
} }
else 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); e.Graphics.DrawImage(ImageList.Images[e.Node.SelectedImageIndex], imageLeft, e.Bounds.Y + (e.Bounds.Height - ImageList.ImageSize.Height) / 2);
else else
e.Graphics.DrawImage(ImageList.Images[e.Node.ImageIndex], imageLeft, e.Bounds.Y + (e.Bounds.Height - ImageList.ImageSize.Height) / 2); 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)] [Description("展开节点后选中第一个子节点"), DefaultValue(true)]
public bool ExpandSelectFirst { get; set; } = 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 ScrollBarInfo.ShowScrollBar(Handle, 3, false);//0:horizontal,1:vertical,3:both
} }
}
public static class TreeViewHelper public TreeNode CreateNode(string text, int pageIndex)
{
public static bool Selected(this DrawTreeNodeEventArgs e)
{ {
return e.State == TreeNodeStates.Selected || e.State == TreeNodeStates.Focused || return CreateNode(new NavMenuItem(text, pageIndex));
e.State == (TreeNodeStates.Focused | TreeNodeStates.Selected);
} }
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) public TreeNode CreateNode(NavMenuItem item)
{
return navMenu.CreateNode(new NavMenuItem(page.Text, page.PageIndex));
}
public static TreeNode CreateNode(this UINavMenu navMenu, NavMenuItem item)
{ {
TreeNode node = new TreeNode(item.Text); TreeNode node = new TreeNode(item.Text);
navMenu.Nodes.Add(node); Nodes.Add(node);
navMenu.SetNodeItem(node, item); SetNodeItem(node, item);
return node; 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); TreeNode node = new TreeNode(item.Text);
navBar.Nodes.Add(node); Nodes.Add(node);
navBar.SetNodeItem(node, item); SetNodeItem(node, item);
node.ImageIndex = imageIndex;
return node; 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); TreeNode childNode = new TreeNode(item.Text);
parent.Nodes.Add(childNode); parent.Nodes.Add(childNode);
navMenu.SetNodeItem(childNode, item); SetNodeItem(childNode, item);
return childNode; 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); TreeNode childNode = new TreeNode(item.Text);
parent.Nodes.Add(childNode); 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; return childNode;
} }
} }

View File

@ -393,7 +393,7 @@ namespace Sunny.UI
} }
else 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); e.Graphics.DrawImage(ImageList.Images[e.Node.SelectedImageIndex], imageLeft, e.Bounds.Y + (e.Bounds.Height - ImageList.ImageSize.Height) / 2);
else else
e.Graphics.DrawImage(ImageList.Images[e.Node.ImageIndex], imageLeft, e.Bounds.Y + (e.Bounds.Height - ImageList.ImageSize.Height) / 2); 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; } public string Version { get; }
protected override void OnNodeMouseClick(TreeNodeMouseClickEventArgs e) protected override void OnNodeMouseClick(TreeNodeMouseClickEventArgs e)