- - PR -
.Netのハンドルについて
1
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-11-13 21:58
初歩的質問で申し訳ないですが、ご教授ください。 やりたいこと・・・フォームを、常に手前に表示する。 VB6.0では、 Dim HWND Public Const HWND_NOTOPMOST = -2 Public Const HWND_TOPMOST = -1 Public Const SWP_NOMOVE = 2 Public Const SWP_NOSIZE = 1 HWND = Form1.Handle() SetWindowPos(HWND, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE + SWP_NOMOVE) で、実現できるようですが、 .Netでは、Form1のメソッドにHandleが存在しないようです。 また、Form1をMeに変更すると、Handleが存在するのですが、ビルドすると、SetWindowPosにて、次のエラーメッセージが出てしまい、うまくいきません。ちなみに変数宣言では、Dim HWND as Objectに変更しています。 エラー:追加情報:型'IntPtr'から型'Long'へのキャストが有効ではありません。 どのように解決したらよいかわかりません。よろしくお願いいたします。 | ||||||||||||||||
|
投稿日時: 2005-11-13 22:09
VB.NETではVB6までからは型が大幅に変更されています。
例えばLongはIntegerに、IntegerはShortになりました。 さらに、ハンドルやポインタは今までLongで表現していましたがIntPtrで表現するようになっています。 そのままVB6のコードをコピーするだけではなかなかうまくいかないでしょう。 で、それとは全く関係なく、フォームを常に手前に表示するのには、フォームのTopMostプロパティをTrueにするだけで済みます。 | ||||||||||||||||
|
投稿日時: 2005-11-13 23:20
ありがとうございます。
簡単に問題が解決しました。 | ||||||||||||||||
|
投稿日時: 2005-11-13 23:53
問題自体の回答はとっくについているので、Hongliang さんの前半部分に補足します。
Form1.hWnd の間違いですよね。 それと、HWND と名乗っている変数は Long で定義しても問題ありません。
メソッドではなくプロパティですね。 インスタンス化さえされていれば、Form1.Handle でいけるはずです。
これが何故に「存在する」のかを考えて頂けると嬉しいですね。 上記で述べた内容がまさにこれにあたります。 これは、Me がインスタンス化されたフォームだからですね。
Handle プロパティは元より System.IntPtr 型ですから Long にする必要はありません。 VB6 および .NET での参考 URL フォームを常に最前面に表示する _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
1