みなさん、私はC#が初めてなので、助けてください...
メッセージを処理するためにWndProcを追加したいのですが、プロパティを調べましたが、関数名を表示するサンダーボルトが表示されないので、好きなものを追加できます。インターネットを検索すると、WndProc が次のように表示されます。
protected override void WndProc(ref Message msg)
{
//do something
}
入力するのではなく、生成してもらいたいですか?
WndProc
.NET イベント ハンドラーではありません。これは、ネイティブ Win32 API の一部であるウィンドウ プロシージャです。Visual Studio のイベント ハンドラーとしてコードを生成することはできません。
Windows フォームでは、フォームの既存のWndProc()
メソッドをオーバーライドしてコーディングを開始するだけです。クラスにForm
あるように、次のように入力すると、オートコンプリート オプションがあります。
override WndProc
次に、次を生成します。
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
}
これを完全に明確にするために、.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";
}
}
}
それで全部です。イベントの厄介なディスパッチは、フレームワークによって行われます。