Новое в C#- хотелось бы добавить WndProc
Все, я новичок в C#, пожалуйста, помогите мне...
Я хотел бы добавить WndProc для обработки сообщений, у меня есть свойства, но я не вижу, как удар молнии отображает имя функции, поэтому я могу добавить то, что мне нравится. Я ищу в интернете и вижу WndProc как
protected override void WndProc(ref Message msg)
{
//do something
}
Я хотел бы, чтобы это было сгенерировано для меня, а не напечатало это?
2 ответа
WndProc
не является обработчиком событий.NET; это оконная процедура, часть родного Win32 API. Вы не получите никакого генерирования кода для него как обработчик событий в Visual Studio.
В Windows Forms все, что вам нужно сделать, это переопределить существующую форму WndProc()
метод и начать кодирование. Как это найдено в Form
класс, есть опция автозаполнения для него, если вы введете следующее:
override WndProc
который затем генерирует:
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
}
Просто чтобы прояснить это: довольно маловероятно, что вам когда-нибудь придется что-то делать с WndProc внутри winforms/wpf/ что угодно в мире.net. Все эти неприятные вещи отвлечены и спрятаны от вас, и я не знаю ни одного случая, где бы я действительно нуждался / пропустил это.
В Winforms вы просто подключаете события с
Eventname += EventHandlerMethod;
(или вы можете делать такие более сложные вещи с анонимными методами и лямбдами, но в данный момент не слишком увлекайтесь этим).
Самый простой способ - просто использовать конструктор и подключать туда свои события:После подписки на событие с помощью этого инструмента редактор покажет вам созданный им обработчик, и вы сможете начать кодирование.
Вот краткий пример: я только начал новый проект и добавил на форму одну кнопку "button1":
затем я подключаю событие OnClick к кнопке (выберите кнопку и перейдите на вкладку событий):
и, наконец, я добавил код, чтобы изменить текст кнопок на "нажал" в коде:
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace StackruHelp1
{
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";
}
}
}
это все. Гадкая диспетчеризация событий осуществляется рамками.