大家,我对C#很陌生,请帮助我......
我想添加 WndProc 来处理消息,我查看了属性,但我没有看到显示函数名称的迅雷,所以我可以添加一个我喜欢的。我搜索互联网并将 WndProc 视为
protected override void WndProc(ref Message msg)
{
//do something
}
我希望它为我生成,而不是输入它?
WndProc
不是 .NET 事件处理程序;它是一个窗口过程,是本机 Win32 API 的一部分。作为 Visual Studio 中的事件处理程序,您不会为它生成任何代码。
在 Windows 窗体中,您所要做的就是覆盖窗体的现有WndProc()
方法并开始编码。正如在Form
课堂上找到的那样,如果您键入以下内容,则会有一个自动完成选项:
override WndProc
然后生成:
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
}
只是为了清楚地说明这一点:在.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";
}
}
}
就这样。令人讨厌的事件分派是由框架完成的。