重写控件的鼠标响应后ContextMenu无法显示的问题

broadury 2004-07-04 11:12:02
我写一个PictureBox的MouseMove和MouseLeave事件后,右击鼠标想显示ContextMenu,结果是一闪而过,无法显示。这该如何解决?
...全文
169 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lookie 2005-01-22
  • 打赏
  • 举报
回复
应该没有问题
broadury 2004-07-05
  • 打赏
  • 举报
回复
PanelIcon是一个继承PictureBox的类,编译成用户控件,在Windows应用程序中调用,并指定了ContextMenu,但是完成鼠标响应的代码后菜单就出不来了:
public class PanelIcon : PictureBox
{
public int index;
public IconPanel iconPanel;
public uint ID;

private Color bckgColor;
private bool mouseEnter;

public int Index
{
get
{
return index;
}
}

public PanelIcon(IconPanel parent, Image image, int index, EventHandler onDoubleClickEvent)
{
this.index=index;
this.iconPanel=parent;
Image=image;
Visible=true;
Location=new Point(iconPanel.outlookBar.Size.Width/2-image.Size.Width/2,
iconPanel.Margin + index*iconPanel.IconSpacing);
Size=image.Size;
DoubleClick+=onDoubleClickEvent;
Tag=this;

MouseEnter+=new EventHandler(OnMouseEnter);
DoubleClick+=new EventHandler(onDoubleClickEvent);
MouseLeave+=new EventHandler(OnMouseLeave);
MouseMove+=new MouseEventHandler(OnMouseMove);
MouseDown+=new MouseEventHandler(OnMouseDown);
MouseUp+=new MouseEventHandler(OnMouseUp);
bckgColor=iconPanel.BackColor;
mouseEnter=false;
}

private void OnMouseMove(object sender, MouseEventArgs args)
{
if ( (args.X < Size.Width-2) &&
(args.Y < Size.Width-2) &&
(!mouseEnter) )
{
BackColor=Color.LightCyan;
BorderStyle=BorderStyle.FixedSingle;
Location=Location-new Size(1, 1);
mouseEnter=true;
}
}

private void OnMouseLeave(object sender, EventArgs e)
{

if (mouseEnter)
{
BackColor=bckgColor;
BorderStyle=BorderStyle.None;
Location=Location+new Size(1, 1);
mouseEnter=false;
}
}

private void OnMouseDown(object sender, MouseEventArgs args)
{
if ( (args.X < Size.Width-2) &&
(args.Y < Size.Width-2) &&
(!mouseEnter) )
{
BackColor=Color.LightCyan;
BorderStyle=BorderStyle.Fixed3D;
Location=Location+new Size(1, 1);
}
}

private void OnMouseUp(object sender, MouseEventArgs args)
{
if ( (args.X < Size.Width-2) &&
(args.Y < Size.Width-2) &&
(!mouseEnter) )
{
BackColor=Color.LightCyan;
BorderStyle=BorderStyle.None;
Location=Location-new Size(1, 1);
}
}

private void OnMouseEnter(object sender, EventArgs e)
{
}

private void OnMouseClick(object sender, EventArgs e)
{
}


}

songbird 2004-07-05
  • 打赏
  • 举报
回复
代码贴出来看看

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧