每个人,我对C#都是新手,请帮助我......
我想添加WndProc来处理消息,我已经查看了属性,但是我没有看到thunderbolt显示函数名,所以我可以添加一个我喜欢的。我搜索互联网并看到WndProc为
protected override void WndProc(ref Message msg)
{
//do something
}
我希望它能为我生成,而不是输入它?
答案 0 :(得分:7)
WndProc
不是.NET事件处理程序;它是window procedure,是原生Win32 API的一部分。作为Visual Studio中的事件处理程序,您不会为它生成任何代码。
在Windows窗体中,您所要做的就是覆盖表单的现有WndProc()
方法并开始编码。正如在Form
类中找到的那样,如果您键入以下内容,则会有一个自动完成选项:
override WndProc
然后生成:
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
}
答案 1 :(得分:5)
只是为了清楚地说明这一点:你不得不在.net世界中的winforms / wpf /中使用WndProc做一些不太可能的事情。 所有这些讨厌的东西都被抽象出来并隐藏起来,我不知道我真正需要/错过它的单一案例。
在Winforms中,您只需使用
连接事件Eventname += EventHandlerMethod;
(或者你可以使用匿名方法和lambdas做更高级的东西,但目前并不关心它自己。)
最简单的方法是使用Designer并将事件挂钩: 使用此工具订阅事件后,编辑器将显示它创建的处理程序,您可以开始编码。
这是一个简单的例子: 我刚刚开始一个新项目并在表单上添加了一个按钮“button1”:
然后我连接按钮的OnClick-Event(选择按钮并转到事件选项卡):
最后我添加了代码来将按钮文本更改为“clicked”到代码隐藏中:
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";
}
}
}
就是这样。讨厌的事件调度由框架完成。