Windowsフォームを使用して、ウィンドウを特定の座標に配置する必要がありました。唯一そのウィンドウのハンドルを取得するとき、それがうまく機能、しかしC#ウィンドウの配置
public Form1()
{
InitializeComponent();
this.Top = 0;
this.Left = 0;
}
を:私はそれが簡単な方法で行うことができると思ったが、コードは、次のことはまったく動作しない
public Form1()
{
InitializeComponent();
IntPtr hwnd = this.Handle;
this.Top = 0;
this.Left = 0;
}
あなたはそのポインタで作業していないことがわかります。
Handleプロパティの値はWindows HWNDです。ハンドルに がまだ作成されていない場合、このプロパティを参照すると、ハンドル が強制的に作成されます。
ハンドルの作成後にのみウィンドウ位置を設定できるということですか?このハンドルを内部的に使用してセッターをトップ/レフトしますか?明確化のためにありがとうございます。
あなたの質問に答えていませんが、 'OnHandleCreated'メソッドをオーバーライドして' this.Handle'の呼び出しを避けることができます。 'this.Handle'は基になるハンドルをチェックして作成するように見えますが、基になるハンドルに依存する他のプロパティは明らかに奇妙です。 –
あなたはデザイナーでそれらを設定しようとしましたか? –
私はそれをさまざまな方法で回避することができます。他のフレームワーク(Qt、wxWidgets、MFC ...)では、ウィンドウの構築中に直接ウィンドウの位置を設定できるので、なぜこのように動作するのか知りたかっただけです。 – Fremen