C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: MDIでウインドウの位置を取得する方法


(過去ログ 172 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■99244 / inTopicNo.1)  MDIでウインドウの位置を取得する方法
  
□投稿者/ ゆさっぷ (1回)-(2022/02/25(Fri) 17:10:10)

分類:[.NET 全般] 

VB.NETでMDIアプリケーションを開発しています。


親フォームParentFormのウインドウの左上の端を原点とした
子フォームChildFormのウインドウの位置を取得したいと考えています。


そのために、
子フォームの親フォームにおけるクライエント座標に
タイトルバーとメニューバーの高さを足し算してみたのですが、
Dim RectLocal As Rectangle = ChildForm.Bounds + SystemInformation.CaptionHeight + SystemInformation.MenuHeight


わずかにY方向に下にずれてしまいます(つまり、Y値が正に大きすぎる)。

このわずかなずれは何によって生じるものでしょうか?

もっと一発で子フォームの位置を取得できる方法ってないでしょうか?



引用返信 編集キー/
■99247 / inTopicNo.2)  Re[1]: MDIでウインドウの位置を取得する方法
□投稿者/ KOZ (223回)-(2022/02/25(Fri) 18:12:07)
No99244 (ゆさっぷ さん) に返信
> VB.NETでMDIアプリケーションを開発しています。
> 親フォームParentFormのウインドウの左上の端を原点とした
> 子フォームChildFormのウインドウの位置を取得したいと考えています。

スクリーン座標に変換して求めます。
Dim localLocation As Point = ChildForm.Parent.PointToScreen(ChildForm.Location) - CType(ParentForm.Location, Size)

引用返信 編集キー/
■99254 / inTopicNo.3)  Re[2]: MDIでウインドウの位置を取得する方法
□投稿者/ ゆさっぷ (2回)-(2022/02/27(Sun) 12:21:00)

ありがとうございます。

うまく取得することができました。


知らなかったのですが、
Point変数とSize変数を引き算できるのはなぜなのでしょうか?
Point変数同士は引き算できないのに
よりによって、異なるタイプ変数で引き算できるというのは不思議です。
検索して調べても意外と情報は見つかりませんでした。


あと、フォームの位置だけでなく、サイズもRectangleの形で取得したのですが

RectLocal = New Rectangle(localLocation.X, localLocation.Y, ChildForm.Width, ChildForm.Height)

のようにして、変換する必要がありますか?
Rectangleも一発で取得できる方法があればお教えください。



引用返信 編集キー/
■99255 / inTopicNo.4)  Re[3]: MDIでウインドウの位置を取得する方法
□投稿者/ KOZ (224回)-(2022/02/27(Sun) 12:59:42)
No99254 (ゆさっぷ さん) に返信
> 知らなかったのですが、
> Point変数とSize変数を引き算できるのはなぜなのでしょうか?

演算子がオーバーロードされているからです

Point.Subtraction(Point, Size) 演算子
https://docs.microsoft.com/ja-jp/dotnet/api/system.drawing.point.op_subtraction?view=netframework-4.8


> RectLocal = New Rectangle(localLocation.X, localLocation.Y, ChildForm.Width, ChildForm.Height)

RectLocal = New Rectangle(localLocation, ChildForm.Size)
のようにも書けます。
引用返信 編集キー/
■99264 / inTopicNo.5)  Re[4]: MDIでウインドウの位置を取得する方法
□投稿者/ ゆさっぷ (3回)-(2022/03/01(Tue) 19:02:20)
解決しました。
どうもありがとうございます。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -