Новое в C # - хотелось бы добавить WndProc - PullRequest
2 голосов
/ 29 августа 2011

Все, я новичок в C #, пожалуйста, помогите мне ...

Я хотел бы добавить WndProc для обработки сообщений, я посмотрел в свойствах, но не вижу молнииимя функции, чтобы я мог добавить тот, который мне нравится.Я ищу в Интернете и вижу WndProc как

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

Я бы хотел, чтобы он был сгенерирован для меня, а не напечатан?

Ответы [ 2 ]

7 голосов
/ 29 августа 2011

WndProc не является обработчиком событий .NET; оконная процедура , часть родного Win32 API. Вы не получите никакого генерирования кода для него как обработчик событий в Visual Studio.

В Windows Forms все, что вам нужно сделать, это переопределить существующий метод WndProc() формы и начать кодирование. Как он обнаружен в классе Form, для него есть опция автозаполнения, если вы наберете следующее:

override WndProc

, который затем генерирует:

    protected override void WndProc(ref Message m)
    {
        base.WndProc(ref m);
    }
5 голосов
/ 29 августа 2011

просто чтобы прояснить это: довольно маловероятно, что вам когда-нибудь придется что-то делать с WndProc внутри winforms / wpf / что угодно в мире .net. Все эти неприятные вещи отвлечены и спрятаны от вас, и я не знаю ни одного случая, где бы я действительно нуждался / пропустил это.

В Winforms вы просто подключаете события с

Eventname += EventHandlerMethod;

(или вы можете делать такие более сложные вещи с помощью анонимных методов и лямбд, но в данный момент не слишком увлекайтесь этим).

Самый простой способ - просто использовать конструктор и подключать туда свои события: enter image description here После подписки на событие с помощью этого инструмента редактор покажет вам созданный им обработчик, и вы сможете начать кодирование.

Вот краткий пример: Я только запустил новый проект и добавил на форму одну кнопку «button1»: enter image description here

затем я подключаю событие OnClick к кнопке (выберите кнопку и перейдите на вкладку события): enter image description here

и, наконец, я добавил код, чтобы изменить текст кнопок на «нажал» в коде:

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";
        }
    }
}

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

...