3

みなさん、私はC#が初めてなので、助けてください...

メッセージを処理するためにWndProcを追加したいのですが、プロパティを調べましたが、関数名を表示するサンダーボルトが表示されないので、好きなものを追加できます。インターネットを検索すると、WndProc が次のように表示されます。

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

入力するのではなく、生成してもらいたいですか?

4

2 に答える 2

8

WndProc.NET イベント ハンドラーではありません。これは、ネイティブ Win32 API の一部であるウィンドウ プロシージャです。Visual Studio のイベント ハンドラーとしてコードを生成することはできません。

Windows フォームでは、フォームの既存のWndProc()メソッドをオーバーライドしてコーディングを開始するだけです。クラスにFormあるように、次のように入力すると、オートコンプリート オプションがあります。

override WndProc

次に、次を生成します。

    protected override void WndProc(ref Message m)
    {
        base.WndProc(ref m);
    }
于 2011-08-29T07:03:35.487 に答える
5

これを完全に明確にするために、.netの世界でwinforms / wpf/whatever内のWndProcで何かをしなければならないことはほとんどありません。この厄介なものはすべて抽象化されてあなたから隠されており、私が本当にそれを必要とした/見逃した単一のケースを知りません。

Winformsでは、イベントを次のように接続するだけです。

Eventname += EventHandlerMethod;

(または、匿名メソッドとラムダを使用してこのような高度な処理を実行できますが、現時点ではあまり気にする必要はありません)。

最も簡単な方法は、Designerを使用して、そこでイベントをフックすること ここに画像の説明を入力してください です。このツールでイベントをサブスクライブした後、エディターは作成したハンドラーを表示し、コーディングを開始できます。

簡単な例を次に示します。新しいプロジェクトを開始し、フォームに1つのボタン「button1」を追加しました。 ここに画像の説明を入力してください

次に、ボタンのOnClick-Eventを接続します(ボタンを選択して、イベントタブに移動します)。 ここに画像の説明を入力してください

そして最後に、ボタンのテキストをコードビハインドに「クリック」するように変更するコードを追加しました。

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

それで全部です。イベントの厄介なディスパッチは、フレームワークによって行われます。

于 2011-08-29T07:18:54.537 に答える