求助个c# winform的问题

pgdoryoku 2008-12-14 08:47:18
我新建了一个用户控件,然后从工具箱里拉了一个DatatimePick控件,
我想重写该DatatimePick的鼠标右键事件,用了以下代码:

protected override void WndProc(ref Message m)
{
if (m.Msg == 0x0204)
{
MessageBox.Show("您点击了鼠标右键!!");
return;
}
else
base.WndProc(ref m);
}

问题:可是通过上面的代码,被重写的只是该用户控件整个背景的鼠标右键事件,
而我真正想重写的DatatimePick控件的右键事件,
却没有被重写.....

求高手指点,我该如何写才能重写我指定的控件的事件?
谢谢了。
...全文
123 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
pgdoryoku 2008-12-14
  • 打赏
  • 举报
回复
非常感谢net5i ~~~
net5i 2008-12-14
  • 打赏
  • 举报
回复
回14楼,自定义的MyDateTimePicker控件,完整代码如下:

public class MyDateTimePicker : DateTimePicker
{
public event EventHandler RightMouseClick;
[System.ComponentModel.Description("当右击控件时触发这个自定义的RightMouseClick事件")]
protected virtual void OnRightMouseClick(EventArgs e)
{
if(this.RightMouseClick!=null)
this.RightMouseClick(this, e);
}

public MyDateTimePicker()
{
}

protected override void WndProc(ref Message m)
{
if (m.Msg == 0x0204)
{
//MessageBox.Show("您点击了鼠标右键!!");
this.OnRightMouseClick(EventArgs.Empty);
return;
}
else
base.WndProc(ref m);
}
}
要重写.NET中的某个控件,基本上都是这样实现的,这个应该很好理解的,兄弟看看吧
pgdoryoku 2008-12-14
  • 打赏
  • 举报
回复
解决了。
public class 这里改成这个就可以了:
public partial class SDateTimePicker : System.Windows.Forms.DateTimePicker

谢谢net5i ,谢谢大家
pgdoryoku 2008-12-14
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 net5i 的回复:]
这个自定义事件:RightMouseClick,也是可以从MyDateTimePicker控件的事件栏里面找到的

如果想在事件栏下面的描述里面,看到该事件的描述的话,可以这样修改:

[System.ComponentModel.Description("当右击控件时触发这个自定义的RightMouseClick事件")]
public event EventHandler RightMouseClick;
[/Quote]
楼上真高手,小弟我实在看不懂....
能麻烦您老给个完整的代码看看吗?
谢谢了。
hernmmy 2008-12-14
  • 打赏
  • 举报
回复
都是高手啊,都很全了
net5i 2008-12-14
  • 打赏
  • 举报
回复
搂主编译一下你这个工程之后,你便可以从VS的工具栏中找到这个MyDateTimePicker控件了
你试试看?
net5i 2008-12-14
  • 打赏
  • 举报
回复
这个自定义事件:RightMouseClick,也是可以从MyDateTimePicker控件的事件栏里面找到的

如果想在事件栏下面的描述里面,看到该事件的描述的话,可以这样修改:

[System.ComponentModel.Description("当右击控件时触发这个自定义的RightMouseClick事件")]
public event EventHandler RightMouseClick;
net5i 2008-12-14
  • 打赏
  • 举报
回复
呵呵,8楼说的已经是新建了一个自定义控件MyDateTimePicker ,这个控件是继承于.NET中的DateTimePicker控件的

然后需要把你窗体中的 DateTimePicker类型的控件替换成MyDateTimePicker控件,然后添加MyDateTimePicker控件的RightMouseClick这个自定义事件的实现就可以了
pgdoryoku 2008-12-14
  • 打赏
  • 举报
回复
回net5i 兄弟,
按你所说的添加一个MyDateTimePicker.cs类的方法,我弄了好久都没出来,
能否用新建用户控件的方式来做实现重写?
net5i 2008-12-14
  • 打赏
  • 举报
回复
噢,搂主是想要指定的事件

这样的:
添加一个MyDateTimePicker.cs类,然后写下面代码:

public class MyDateTimePicker : DateTimePicker
{
public event EventHandler RightMouseClick;
protected virtual void OnRightMouseClick(EventArgs e)
{
if(this.RightMouseClick!=null)
this.RightMouseClick(this, e);
}

public MyDateTimePicker()
{
}

protected override void WndProc(ref Message m)
{
if (m.Msg == 0x0204)
{
//MessageBox.Show("您点击了鼠标右键!!");
this.OnRightMouseClick(EventArgs.Empty);
return;
}
else
base.WndProc(ref m);
}
}

然后搂主在myDateTimePicker所在窗口的类中实现这个你的RightMouseClick这个事件既可以了
net5i 2008-12-14
  • 打赏
  • 举报
回复
搂主从工具栏中拖一个ContextMenuStrip到窗口中,然后设置DateTimePicker控件的ContextMenuStrip属性为你拖入的那个ContextMenuStrip控件,然后给ContextMenuStrip控件添加菜单项既可以了

这样不行么?
wuyq11 2008-12-14
  • 打赏
  • 举报
回复
要扩展DatatimePick的鼠标右键事件,继承DatatimePick写控件
参考
http://www.cnblogs.com/jeff377/archive/2008/06/22/1227731.html
http://www.cnblogs.com/miclu/category/95897.html
pgdoryoku 2008-12-14
  • 打赏
  • 举报
回复
谢谢楼上,我想了解的是如何重写指定控件的事件,并不想调用现成的方法,
上面的问题请把它理解为一类问题...
谢谢
net5i 2008-12-14
  • 打赏
  • 举报
回复
搂主这样做才对:

添加一个MyDateTimePicker.cs类,然后写下面代码:

public class MyDateTimePicker : DateTimePicker
{
public MyDateTimePicker()
{
}

protected override void WndProc(ref Message m)
{
if (m.Msg == 0x0204)
{
MessageBox.Show("您点击了鼠标右键!!");
return;
}
else
base.WndProc(ref m);
}
}
ivorstar 2008-12-14
  • 打赏
  • 举报
回复
应该从DateTimePicker继承一个子类,然后重写它的WndProc方法

class MyDateTimePicker : System.Windows.Forms.DateTimePicker
{
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x0204)
{
MessageBox.Show("您点击了鼠标右键!!");
return;
}
else
base.WndProc(ref m);
}
}

....

private MyDateTimePicker dateTimePicker1;
Ameer_lilin 2008-12-14
  • 打赏
  • 举报
回复
lz你想法是对的 但是做法不现实的 同意楼上的做法
yaazz 2008-12-14
  • 打赏
  • 举报
回复
直接在DatatimePick的MouseDown事件中写行不

private void dateTimePicker1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{

}
}

111,125

社区成员

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

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

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