社区
C#
帖子详情
C#中,可以自定义消息吗?
韩小明
2003-04-02 06:45:57
Delphi和VC中都可以,请问在C#中可以吗?谢谢
...全文
136
26
打赏
收藏
C#中,可以自定义消息吗?
Delphi和VC中都可以,请问在C#中可以吗?谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
26 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
韩小明
2003-04-11
打赏
举报
回复
分不多,感谢大家来讨论!谢谢
韩小明
2003-04-11
打赏
举报
回复
同意
ixMind
2003-04-10
打赏
举报
回复
我想.Net里的消息有两种,
一是Message结构体,用于windows窗体
一是Message类,用于消息队列(MessageQueue)
不知道你想用那一种
对于windows消息,我想就是用API SendMessage
然后改写WndProc处理自定义的消息
对于MessageQueue,我没有用过,msdn对这东西讲的比较多
就像楼主所说的,消息机制和委托相比,
还有一个优点就是通信双方的松散耦合,
当然也有相应的缺点:参数和返回值的形式和含义只能在另外的地方“软性”定义
例如windows消息里的uMsg, lParam, wParam和lResult
我觉得象.Net这样的类库,一般都会倾向于使用Property-Method-Event
这些相对明确的接口形式来定义通信的协议,对于非常规的要求,反正
还有windows api等一些非常规手段可以满足要求
个人见解,敬请指正
ixMind
2003-04-09
打赏
举报
回复
.Net当然是希望使用“事件-委托”的机制而不是Message
虽然两者在本质上没有太大的差别,但使用方式还是挺不一样的
至少windows的消息机制相对较为低级,可能效率比较高,
但我想是不太适合于.net这样“现代”和高级的架构
如果要用的话,用上面提到的windows API和重栽WinProc应该可以搞定吧
当然还是推荐使用事件和委托,除非有别的什么原因...
想象SDK里WindowProc的臃肿还有MFC里MessageMap的复杂...
mamu
2003-04-09
打赏
举报
回复
mark
hillwell
2003-04-09
打赏
举报
回复
关注
韩小明
2003-04-09
打赏
举报
回复
关键在于:
消息可以不去理会接受方是否有处理。
委托却不可以做到啊。应该不光是效率问题。
另外:
.NET也是有消息的。Message这个组件就可以使用。
而进程间的通讯本就支持使用消息。
因为不管什么操作系统都有消息驱动啊。.NET如果想在多个平台上,支持消息是必然的。
gloomyfire
2003-04-07
打赏
举报
回复
1.定义一个包含事件信息的类.
2.定义一个delegate
3.定义一个delegate类型为2的event事件成员
4.定义一个事件来触发event成员
5.触发
韩小明
2003-04-07
打赏
举报
回复
好像每个对象有个消息队列是不是?可以Reciev和Send?
C#中的消息机制是怎样的呢?
engine_
2003-04-07
打赏
举报
回复
mark
fspigigg
2003-04-06
打赏
举报
回复
可以直接引用windows的消息常量吗?
sysu
2003-04-05
打赏
举报
回复
public const int WM_USER = 0x400;
public const int WM_MYBUTTONCLICK = WM_USER + 100;
[DllImport("user32",EntryPoint="SendMessage")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_MYBUTTONCLICK)
{
MessageBox.Show("MyButton Click");
}
else
base.WndProc(ref m);
}
private void button1_Click(object sender, System.EventArgs e)
{
SendMessage(this.Handle, WM_MYBUTTONCLICK, 0, 0);
}
tms2000
2003-04-05
打赏
举报
回复
重载WndProc是处理消息呀,不是发消息
当然可以,用老的编程机制,吧SendMessageA PostMessageA Api导出来,发就ok了
zlcoolzl
2003-04-04
打赏
举报
回复
up
xxj
2003-04-04
打赏
举报
回复
重载WndProc
LYH1977
2003-04-04
打赏
举报
回复
是用委托事件实现的
yarshray
2003-04-03
打赏
举报
回复
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace userEvent
{
/// <summary>
/// Form1 的摘要说明。
/// </summary>
public delegate void MYShow();
public class Form1 : System.Windows.Forms.Form
{
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;
public event MYShow ShowME;
public Form1()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
this.ShowME();
}
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows Form Designer generated code
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(292, 273);
this.Name = "Form1";
this.Text = "Form1";
this.ShowME+=new MYShow(this.ShowMeName);
}
#endregion
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
void ShowMeName()
{
MessageBox.Show("I'm yarshray");
}
}
}
详细说明参考:
http://www.csdn.net/develop/read_article.asp?id=16267
yarshray
2003-04-03
打赏
举报
回复
当然,可以event和代理嘛
bluebirdboy
2003-04-03
打赏
举报
回复
protected void Eventname(object sender, System.Enventargs e)
{
//some codes for you!
}
40Star
2003-04-03
打赏
举报
回复
当然,微软开发的东西能不支持自己的消息么
加载更多回复(6)
C#
制作用户
自定义
控件 可自选按钮素材、图标、事件、方法 非常好
C#
制作用户
自定义
控件 可自选按钮素材、图标、事件、方法 非常好
C#
自定义
控件库
C#
自定义
控件库
C#
Winform报表与打印技术——
自定义
报表的实现
本课程详细讲解在
C#
Winform程序里,对DataGridView展示的数据进行
自定义
报表格式的设计、预览、打印如何实现
自定义
表单设计器演示版源码(
C#
)
自定义
表单设计器演示版源码(
C#
) 可以自行设计表单并保存
C#
自定义
窗体美化
采用GDI+对窗体进行美化,代码分析文章可见我的博文《
C#
中
窗体美化》http://www.cnblogs.com/Keep-Silence-/archive/2013/01/09/2852937.html
C#
110,500
社区成员
642,567
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章