如何将我的ImageButton添加到ToolStrip(How add my ImageButton to ToolStrip)

编程入门 行业动态 更新时间:2024-10-17 21:28:47
如何将我的ImageButton添加到ToolStrip(How add my ImageButton to ToolStrip)

创建IMageButton并添加到toolstrip:

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 }

Create IMageButton and add to toolstrip:

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

crash error

Error 1 Cannot implicitly convert type 'lient.userControl.ImageButton' to 'System.Windows.Forms.ToolStripItem' E:\net_project\trunk\Client\Client\userControl\ToolBox.cs 29 15 Client

My 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 }

最满意答案

您不能简单地将控件添加到ToolStrip , ContextStrip或StatusStrip 。

它需要从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进一步了解相关信息。

PS

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

You can't simply add a control to a ToolStrip, ContextStrip or StatusStrip.

It needs to inherit from ToolStripItem.

There's a simple way to do it though:

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

or better, extend ToolStripControlHost class like:

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... }

follow this MSDN howto to further infos.

P.S.

You can also show your custom ImageButtonItem in the designer adding the ToolStripItemDesignerAvailability attribute onto your ImageButtonItem class.

更多推荐

本文发布于:2023-08-05 20:08:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1437979.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:如何将   ImageButton   add   ToolStrip

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!