#region using System; using System.Collections.Generic; using System.Drawing; using CSFrameworkV5.Common; using CSFrameworkV5.Core; using DevExpress.XtraBars; ///*************************************************************************/ ///* ///* 文件名 :ToolbarButtons.cs ///* 程序说明 : Toolbar自定义按钮 ///* 原创作者 :www.csframework.com ///* ///* Copyright 2006-2021 C/S框架网 www.csframework.com ///* ///**************************************************************************/ #endregion namespace CSFrameworkV5.Library.CommonClass { /// /// DevExpress按钮 /// public class DevBarButtonInfo : IButtonInfo, IDisposable { private int _Authority = ButtonAuthority.NONE; private bool _BeginGroup; private BarButtonItem _btn; private OnButtonClick _clickEvent; //是否回收完毕 private bool _disposed; private bool _ErrorOccurred; private int _Index = -1; public DevBarButtonInfo(BarManager barManager, string name, string caption, ToolBarGroup group, Image image, bool beginGroup, OnButtonClick clickEvent) { _btn = new BarButtonItem(barManager, caption); _btn.Glyph = image; _btn.PaintStyle = BarItemPaintStyle.CaptionGlyph; _btn.Name = name; _BeginGroup = beginGroup; _clickEvent = clickEvent; _btn.ItemClick += OnBarItemClick; GroupName = group.ToStringEx(); IsLargeButton = true; Tag = caption; //默认为按钮标题 } public DevBarButtonInfo(BarManager barManager, string name, string caption, ToolBarGroup group, Image image, bool beginGroup, bool isLargeButton, OnButtonClick clickEvent) : this(barManager, name, caption, group, image, beginGroup, clickEvent) { IsLargeButton = isLargeButton; } public int Authority { get => _Authority; set => _Authority = value; } public bool BeginGroup => _BeginGroup; public object Button => _btn; public string Caption { get => _btn.Caption; set => _btn.Caption = value; } public bool Enable { get => _btn.Enabled; set { _btn.Enabled = value; //按钮可用,设置为可见 if (value) Visible = true; } } public bool ErrorOccurred { get => _ErrorOccurred; set => _ErrorOccurred = value; } public string GroupName { get; set; } public Image Image { get => null; set { } } public int Index { get => _Index; set => _Index = value; } public bool IsLargeButton { get; set; } public string Name { get => _btn.Name; set => _btn.Name = value; } public List SubButtons => new List(); public object Tag { get => _btn.Tag; set => _btn.Tag = value; } public bool Visible { get => _btn.Visibility == BarItemVisibility.Always; set => _btn.Visibility = value ? BarItemVisibility.Always : BarItemVisibility.Never; } public void Dispose() { Dispose(true); //使垃圾回收器不调用该对象的终结器。 GC.SuppressFinalize(this); } /// /// 释放资源 /// /// 是否需要释放那些实现IDisposable接口的托管对象 public void Dispose(bool disposing) { //已经释放,不处理 if (_disposed) return; if (disposing) { //释放那些实现IDisposable接口的托管对象 } // //TODO:释放其他非托管资源 // if (Image != null) { Image.Dispose(); Image = null; } //必须标记已释放 _disposed = true; } ~DevBarButtonInfo() { Dispose(false); } private void OnBarItemClick(object sender, ItemClickEventArgs e) { if (_clickEvent != null) _clickEvent(this); } private void OnClick(object sender, EventArgs e) { if (_clickEvent != null) _clickEvent(this); } } public class DevBarListButton : IButtonInfo, IDisposable { private int _Authority = ButtonAuthority.NONE; private bool _beginGroup; private BarSubItem _btn; private OnButtonClick _clickEvent; //是否回收完毕 private bool _disposed; private bool _ErrorOccurred; private int _Index = -1; private List _SubButtons; public DevBarListButton(BarManager barManager, string name, string caption, ToolBarGroup group, bool beginGroup, bool isLargeButton, Image image, OnButtonClick clickEvent, List subItems) { _SubButtons = new List(); _btn = new BarSubItem(barManager, caption); _btn.Glyph = image; _btn.PaintStyle = BarItemPaintStyle.CaptionGlyph; _btn.Name = name; _beginGroup = beginGroup; _clickEvent = clickEvent; _btn.ItemClick += OnBarItemClick; Tag = caption; //默认为按钮标题 GroupName = group.ToStringEx(); IsLargeButton = isLargeButton; foreach (var btn in subItems) { _SubButtons.Add(btn); _btn.ItemLinks.Add(btn.Button as BarButtonItem); } } public int Authority { get => _Authority; set => _Authority = value; } public bool BeginGroup { get => _beginGroup; set => _beginGroup = value; } public object Button => _btn; public string Caption { get => _btn.Caption; set => _btn.Caption = value; } public bool Enable { get => _btn.Enabled; set { _btn.Enabled = value; //按钮可用,设置为可见 if (value) Visible = true; } } public bool ErrorOccurred { get => _ErrorOccurred; set => _ErrorOccurred = value; } public string GroupName { get; set; } public Image Image { get => null; set { } } public int Index { get => _Index; set => _Index = value; } public bool IsLargeButton { get; set; } public string Name { get => _btn.Name; set => _btn.Name = value; } public List SubButtons => _SubButtons; public object Tag { get => _btn.Tag; set => _btn.Tag = value; } public bool Visible { get => _btn.Visibility == BarItemVisibility.Always; set => _btn.Visibility = value ? BarItemVisibility.Always : BarItemVisibility.Never; } public void Dispose() { Dispose(true); //使垃圾回收器不调用该对象的终结器。 GC.SuppressFinalize(this); } /// /// 释放资源 /// /// 是否需要释放那些实现IDisposable接口的托管对象 public void Dispose(bool disposing) { //已经释放,不处理 if (_disposed) return; if (disposing) { //释放那些实现IDisposable接口的托管对象 } // //TODO:释放其他非托管资源 // if (Image != null) { Image.Dispose(); Image = null; } //必须标记已释放 _disposed = true; } ~DevBarListButton() { Dispose(false); } /// /// 捕捉所有由按钮事件抛出的事件! /// private void OnBarItemClick(object sender, ItemClickEventArgs e) { try { if (_clickEvent != null) _clickEvent(this); } catch (Exception ex) { Msg.ShowException(ex); } } } }