如何将我的 ImageButton 添加到 ToolStrip
创建 IImageButton 并添加到工具条:
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
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您不能简单地将控件添加到
ToolStrip
、ContextStrip
或StatusStrip
。它需要继承自ToolStripItem。
有一个简单的方法可以做到这一点:
或者更好的是,扩展
ToolStripControlHost
类,例如:遵循此 MSDN howto 了解更多信息。
PS
您还可以在设计器中显示自定义
ImageButtonItem
,将ToolStripItemDesignerAvailability
属性添加到ImageButtonItem
类中。You can't simply add a control to a
ToolStrip
,ContextStrip
orStatusStrip
.It needs to inherit from ToolStripItem.
There's a simple way to do it though:
or better, extend
ToolStripControlHost
class like:follow this MSDN howto to further infos.
P.S.
You can also show your custom
ImageButtonItem
in the designer adding theToolStripItemDesignerAvailability
attribute onto yourImageButtonItem
class.