您的当前位置:首页简单的DropDownButton(Winform)

简单的DropDownButton(Winform)

来源:小侦探旅游网
简单的DropDownButton(Winform)

public class DropDownButton : System.Windows.Forms.Control {

private System.ComponentModel.Container components = null; private bool isHover = false; private bool isPressLeft = false; private bool isPressRight = false;

public event EventHandler ClickEvent;

public Menu.MenuItemCollection MenuItems { get; set; } public string Caption { get; set; } public DropDownButton() {

InitializeComponent(); this.RefreshButtonsRects();

m_comboMenu = new ContextMenu();

MenuItems = new Menu.MenuItemCollection(m_comboMenu);

this.SizeChanged += new EventHandler(DropDownButton_SizeChanged); this.MouseUp += new MouseEventHandler(DropDownButton_MouseUp); }

protected override void Dispose(bool disposing) {

if (disposing) {

if (components != null) components.Dispose(); }

base.Dispose(disposing); }

protected override void OnMouseHover(EventArgs e) {

this.isHover = true; this.Invalidate();

base.OnMouseHover(e); }

protected override void OnMouseLeave(EventArgs e) {

this.isHover = false; this.Invalidate();

base.OnMouseLeave(e); }

protected override void OnMouseDown(MouseEventArgs e) {

if (e.Button == System.Windows.Forms.MouseButtons.Left) {

if (m_buttonRect.Contains(e.Location)) {

isPressLeft = true; }

if (m_comboButtonRect.Contains(e.Location)) {

isPressRight = true; }

this.Invalidate(); }

base.OnMouseDown(e); }

protected override void OnMouseUp(MouseEventArgs e) {

if (e.Button == System.Windows.Forms.MouseButtons.Left) {

isPressLeft = false; isPressRight = false; this.Invalidate(); }

base.OnMouseUp(e); }

private void InitializeComponent() { }

private const int COMBOBUTTON_WIDTH = 20; private Rectangle m_buttonRect;

private Rectangle m_comboButtonRect; private ContextMenu m_comboMenu;

protected override void OnPaint(PaintEventArgs pe) {

System.Windows.Forms.VisualStyles.PushButtonState stateL = System.Windows.Forms.VisualStyles.PushButtonState.Normal; System.Windows.Forms.VisualStyles.PushButtonState stateR = System.Windows.Forms.VisualStyles.PushButtonState.Normal; if (isHover) {

stateL = System.Windows.Forms.VisualStyles.PushButtonState.Hot; stateR = System.Windows.Forms.VisualStyles.PushButtonState.Hot; }

if (isPressLeft) {

stateL = System.Windows.Forms.VisualStyles.PushButtonState.Pressed; }

if (isPressRight) {

stateR = System.Windows.Forms.VisualStyles.PushButtonState.Pressed; }

this.CreateGraphics().DrawRectangle(new Pen(SystemBrushes.Control), this.ClientRectangle);

ButtonRenderer.DrawButton(this.CreateGraphics(), m_buttonRect, Caption,

new Font(this.Font, FontStyle.Regular), false, stateL);

ButtonRenderer.DrawButton(this.CreateGraphics(), m_comboButtonRect, \"v\

new Font(this.Font, FontStyle.Regular), false, stateR); base.OnPaint(pe); }

private void DropDownButton_SizeChanged(object sender, EventArgs e) {

this.RefreshButtonsRects(); this.Invalidate(); }

private void RefreshButtonsRects() {

m_buttonRect = new Rectangle( new Point(0, 0),

new Size(this.Width - COMBOBUTTON_WIDTH + 2, this.Height) );

m_comboButtonRect = new Rectangle(

new Point(this.Width - COMBOBUTTON_WIDTH, 0), new Size(COMBOBUTTON_WIDTH, this.Height) ); }

private void DropDownButton_MouseUp(object sender, MouseEventArgs e) {

Point clickedPoint = new Point(e.X, e.Y); if (m_comboButtonRect.Contains(clickedPoint)) {

OnComboButtonClicked(); } else {

OnButtonClicked(e); } }

private void OnButtonClicked(MouseEventArgs e) {

if (this.ClickEvent != null) {

ClickEvent(this, e); } }

private void OnComboButtonClicked() {

Point contextMenuPoint = new Point(m_comboButtonRect.Y, m_comboButtonRect.Height); //m_comboMenu.RightToLeft = System.Windows.Forms.RightToLeft.Yes; m_comboMenu.Show(this, contextMenuPoint); } }

  

因篇幅问题不能全部显示,请点此查看更多更全内容