WinForms:如何模拟图像上的按钮行为?

Che*_*eso 1 .net tabcontrol winforms

我有一个winforms TabControl的扩展,它在每个选项卡上绘制一个X,以允许用户关闭选项卡.

alt text http://i41.tinypic.com/bhelqp.jpg

与标准相比:

替代文字http://i42.tinypic.com/2zqa2c3.jpg

如何模拟该图像上的按钮外观?我的意思是,当用户点击时,它应该在视觉上表明.按钮使用插入图像执行此操作.对于奖励积分,我也想做悬停部分 - 鼠标悬停时图像将"亮起".

但X不是一个按钮,它不是PictureBox控件.它根本不是一种控制.它刚刚被吸引到那里.

有没有办法在MouseDp上绘制插入边框并在MouseUp上引发?对于"插入"阶段,我会更好地生成另一个图像吗?(另一个用于悬停).

有人这么做过吗?


相关:模拟Winforms按钮点击动画
但是这个问题不同,因为他实际上有一个PictureBox控件.我不.

Chr*_*ris 5

如果您刚刚在那里绘制它,那么您需要执行以下操作:

  • 为父控件设置onmouseover/onleftclick事件.这可能是表单本身或制表符控件.
  • 在该功能中,检查鼠标是否在绘制图像的位置.
  • 如果它在绘制图像的位置结束,则显示"单击"或"悬停"状态.

我拼凑了一些关于它看起来如何的代码

myControl.MouseClick += new EventHandler(myClickHandler);

private void myClickHandler(EventArgs e)
{
//Check e to see if left button was pressed
//Check e location to see if mouse is in correct location, i.e. over the "X"
//If so then alter a state variable i.e. tabstates[0] = TabStates.HOVER;
}

private void myDrawingFunc()
{
//Draw X
if (tabstates[0] == TabStates.HOVER)
{
//Draw hover state
}
else
{
//Draw other state
}
}
Run Code Online (Sandbox Code Playgroud)

这显然只是一个例子,但大致表明你将如何做到这一点.注意我添加tabstates为数组或列表,以允许您为每个选项卡具有状态.