2011-08-29 1 views
2

Каждый, я просто так ново для C#, пожалуйста, помогите мне ...Новое в C# -would хотел добавить WNDPROC

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

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

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

+0

Это Windows Forms. – Pevus

ответ

7

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

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

override WndProc 

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

protected override void WndProc(ref Message m) 
    { 
     base.WndProc(ref m); 
    } 
+0

Вы имеете в виду, что я должен ввести прототип этой функции под 'public Form1() {....}' частичного класса Form1? – Pevus

+0

@Pevus: Правильно. Но вам не нужно вводить все это, так как есть автозаполнение для переопределения базовых методов. Я только что расширил свой ответ, чтобы показать это. – BoltClock

+0

Прохладный! Большое спасибо. Сегодня я узнаю новую вещь: – Pevus

5

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

В Winforms вы просто телеграфировать события с

Eventname += EventHandlerMethod; 

(или вы можете сделать такие более продвинутые вещи с методами и annonymous лямбды, но не относятся к себе много с ним в данный момент).

Самый простой способ это просто использовать конструктор и подключить свои события там: 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"; 
     } 
    } 
} 

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

+0

Что касается прокрутки текстового поля? http://stackoverflow.com/questions/14163007/catch-textbox-scroll-event – drzaus

+0

что это? Является ли каждое событие, имеющееся в Windows, прогнозируемым событием Winforms? Вероятно, но, видите ли, есть еще один принятый ответ, и вы, вероятно, можете его использовать (это не то, что я постоянно смотрю все свои ответы с 4 лет назад любым способом;)) – Carsten

+0

Я замечал ваше вступительное заявление о невероятности необходимости «WndProc» ; ссылка на этот вопрос заключалась в том, чтобы указать, что есть люди, которые в ней нуждаются. – drzaus