Новое в 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";
        }
    }
}

это все. Гадкая диспетчеризация событий осуществляется рамками.

Другие вопросы по тегам