c# - 与 Windows 控件的 C++ 相比,clr 如何处理 C# 中的标准事件?

标签 c# c++ events clr

对于标准的 win32 控件,c# 如何在 clr 中处理事件, 说一个按钮:

示例:(c#)

    private void Form1_Load(object sender, EventArgs e)
    {
        button1.Click += (_, __) => { MessageBox.Show("You clicked me !"); };
    }

在主消息循环中是否像 C++?`

例子:

while (GetMessage(&msg, NULL, 0, 0))
{
    if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{

switch (message)
{

case WM_COMMAND:


    if(hWnd>0 && hWnd==buttonhwnd) //Button click
    {
        callback_button();
    }

default:
    return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}

我的意思是,C# 中的所有标准控件都会发送每个信号,例如单击、鼠标悬停、 等到一个模拟循环 - 然后回调在源代码中注册?喜欢我的 lambda 示例吗?

最佳答案

当然,基 native 制是一样的。但是,Winforms(和 WPF)显着改变了消息路由。在 Windows 中,子控件向其父窗口发送通知。 Winforms 管道通过窗口子类化和消息反射的混合改变了这一点,使代码在控件本身中运行。例如按钮的 OnClick() 方法。

从那里,通过事件订阅,任何其他类都可以接收 Click 事件回调。例如,一个常见的模式不是让您放置按钮的面板处理回调,而是让上层表单处理。这为原生 Windows 方式带来了很大的灵 active 。

关于c# - 与 Windows 控件的 C++ 相比,clr 如何处理 C# 中的标准事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8466735/

相关文章:

c# - 当内存转储显示使用的内存很少时调试内存不足情况

c# - 有没有办法在 Windows 窗体中延迟事件处理程序(比如 1 秒)

c# - MongoDb 注册类映射

c# - 按值调用和按值传递是同义词吗?

c++ - 从 C++ 对象返回一个 malloc 指针

c++ - 为什么这个质数每次都重复

Cocoa:我已经收到了用户的输入 - 现在怎么办?

javascript - command/comply、listento/trigger、request/reply 之间的 Marionette 区别

c# - 将 XDocument 优化为 XDocument XSLT

c++ - 如果我在没有任何参数的情况下调用递归函数,则会发生 stackoverflow 错误,那么这背后的原因是什么