#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);
}
}
}
}