3

大家,我对C#很陌生,请帮助我......

我想添加 WndProc 来处理消息,我查看了属性,但我没有看到显示函数名称的迅雷,所以我可以添加一个我喜欢的。我搜索互联网并将 WndProc 视为

protected override void WndProc(ref Message msg) 
{
   //do something
}

我希望它为我生成,而不是输入它?

4

2 回答 2

8

WndProc不是 .NET 事件处理程序;它是一个窗口过程,是本机 Win32 API 的一部分。作为 Visual Studio 中的事件处理程序,您不会为它生成任何代码。

在 Windows 窗体中,您所要做的就是覆盖窗体的现有WndProc()方法并开始编码。正如在Form课堂上找到的那样,如果您键入以下内容,则会有一个自动完成选项:

override WndProc

然后生成:

    protected override void WndProc(ref Message m)
    {
        base.WndProc(ref m);
    }
于 2011-08-29T07:03:35.487 回答
5

只是为了清楚地说明这一点:在.net 世界中,您几乎不可能在winforms/wpf/whatever 中使用WndProc 做某事。所有这些讨厌的东西都被抽象出来并隐藏在你面前,我不知道有一个我真正需要/错过它的案例。

在 Winforms 中,您只需将事件与

Eventname += EventHandlerMethod;

(或者您可以使用匿名方法和 lambda 来做这些更高级的事情,但目前不要太在意它)。

最简单的方法是使用设计器并将您的事件挂在那里: 在此处输入图像描述 使用此工具订阅事件后,编辑器将向您显示它创建的处理程序,您可以开始编码。

这是一个简单的例子:我刚刚开始了一个新项目,并在表单上添加了一个按钮“button1”: 在此处输入图像描述

然后我连接按钮的 OnClick-Event(选择按钮并转到事件选项卡): 在此处输入图像描述

最后我添加了代码以将按钮文本更改为“单击”到代码隐藏中:

using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace StackOverflowHelp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            // the following line is from InitializeComponent - here you can see how the eventhandler is hook
            // this.button1.Click += new System.EventHandler(this.OnButton1Clicked);
        }

        private void OnButton1Clicked(object sender, EventArgs e)
        {
            var button = sender as Button; // <- same as button1
            if (button == null) return; // <- should never happen, but who is to know?
            button.Text = "clicked";
        }
    }
}

就这样。令人讨厌的事件分派是由框架完成的。

于 2011-08-29T07:18:54.537 回答