创建IMageButton并添加到工具栏:

ImageButton imageButton1 = new ImageButton();
toolstrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
            imageButton1});


崩溃错误


  错误1无法隐式转换类型
  'lient.userControl.ImageButton'到
  'System.Windows.Forms.ToolStripItem'E:\ net_project \ trunk \ Client \ Client \ userControl \ ToolBox.cs 29 15客户端


我的ImageButton ^

public partial class ImageButton : PictureBox, IButtonControl
    {
        #region Consturctor
        public ImageButton()
        {
            InitializeComponent();
        }

        public ImageButton(IContainer container)
        {
            container.Add(this);

            InitializeComponent();
        }
        #endregion

        private bool isDefault = false;
        private bool isHover = false;
        private bool isDown = false;


        #region IButtonControl Members

        private DialogResult m_DialogResult;
        public DialogResult DialogResult
        {
            get
            {
                return m_DialogResult;
            }
            set
            {
                m_DialogResult = value;
            }
        }

        public void NotifyDefault(bool value)
        {
            isDefault = value;
        }

        public void PerformClick()
        {
            base.OnClick(EventArgs.Empty);
        }

        #endregion

        #region ImageState
        private Image m_HoverImage;
        public Image HoverImage
        {
            get { return m_HoverImage; }
            set
            {
                m_HoverImage = value;
                if (isHover) Image = value;
            }
        }

        private Image m_DownImage;
        public Image DownImage
        {
            get { return m_DownImage; }
            set
            {
                m_DownImage = value;
                if (isDown) Image = value;
            }
        }

        private Image m_NormalImage;
        public Image NormalImage
        {
            get { return m_NormalImage; }
            set
            {
                m_NormalImage = value;
                if (!(isHover || isDown)) Image = value;
            }
        }

        #endregion

        private const int WM_KEYDOWN = 0x0100;
        private const int WM_KEYUP = 0x0101;
        #region Events
        protected override void OnMouseMove(MouseEventArgs e)
        {
            isHover = true;
            if (isDown)
            {
                if ((m_DownImage != null) && (Image != m_DownImage))
                    Image = m_DownImage;
            }
            else
                if (m_HoverImage != null)
                    Image = m_HoverImage;
                else
                    Image = m_NormalImage;
            base.OnMouseMove(e);
        }

        protected override void OnMouseLeave(EventArgs e)
        {
            isHover = false;
            Image = m_NormalImage;
            base.OnMouseLeave(e);
        }

        protected override void OnMouseDown(MouseEventArgs e)
        {
            base.Focus();
            OnMouseUp(null);
            isDown = true;
            if (m_DownImage != null)
                Image = m_DownImage;
            base.OnMouseDown(e);
        }

        protected override void OnMouseUp(MouseEventArgs e)
        {
            isDown = false;
            if (isHover)
            {
                if (m_HoverImage != null)
                    Image = m_HoverImage;
            }
            else
                Image = m_NormalImage;
            base.OnMouseUp(e);
        }

        private bool holdingSpace = false;

        public override bool PreProcessMessage(ref Message msg)
        {
            if (msg.Msg == WM_KEYUP)
            {
                if (holdingSpace)
                {
                    if ((int)msg.WParam == (int)Keys.Space)
                    {
                        OnMouseUp(null);
                        PerformClick();
                    }
                    else if ((int)msg.WParam == (int)Keys.Escape
                        || (int)msg.WParam == (int)Keys.Tab)
                    {
                        holdingSpace = false;
                        OnMouseUp(null);
                    }
                }
                return true;
            }
            else if (msg.Msg == WM_KEYDOWN)
            {
                if ((int)msg.WParam == (int)Keys.Space)
                {
                    holdingSpace = true;
                    OnMouseDown(null);
                }
                else if ((int)msg.WParam == (int)Keys.Enter)
                {
                    PerformClick();
                }
                return true;
            }
            else
                return base.PreProcessMessage(ref msg);
        }

        protected override void OnLostFocus(EventArgs e)
        {
            holdingSpace = false;
            OnMouseUp(null);
            base.OnLostFocus(e);
        }

        protected override void OnPaint(PaintEventArgs pe)
        {
            base.OnPaint(pe);
            if ((!string.IsNullOrEmpty(Text)) && (pe != null) && (base.Font != null))
            {
                SolidBrush drawBrush = new SolidBrush(base.ForeColor);
                SizeF drawStringSize = pe.Graphics.MeasureString(base.Text, base.Font);
                PointF drawPoint;
                if (base.Image != null)
                    drawPoint = new PointF(base.Image.Width / 2 - drawStringSize.Width / 2, base.Image.Height / 2 - drawStringSize.Height / 2);
                else
                    drawPoint = new PointF(base.Width / 2 - drawStringSize.Width / 2, base.Height / 2 - drawStringSize.Height / 2);
                pe.Graphics.DrawString(base.Text, base.Font, drawBrush, drawPoint);
            }
        }

        protected override void OnTextChanged(EventArgs e)
        {
            Refresh();
            base.OnTextChanged(e);
        }
        #endregion

    }

最佳答案

您不能简单地将控件添加到ToolStripContextStripStatusStrip

它需要从ToolStripItem继承。

有一种简单的方法可以做到:

ImageButton imageButton1 = new ImageButton();
var host = new ToolStripControlHost(imageButton1);
toolstrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {host});


或者更好,扩展ToolStripControlHost类,例如:

public class ImageButtonItem: ToolStripControlHost
{
    private ImageButton imgButton;

    public ImageButtonItem()
        : base(new ImageButton())
    {
        this.imgButton = this.Control as ImageButton;
    }

    // Add properties, events etc. you want to expose...
}


请遵循此MSDN howto以获得更多信息。

附言

您还可以在设计器中显示您的自定义ImageButtonItem,将ToolStripItemDesignerAvailability属性添加到您的ImageButtonItem类中。

关于c# - 如何将我的ImageButton添加到ToolStrip,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4984143/

10-17 02:49