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

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

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

Re[6]: ディスプレイ外のフォーム右上端の座標の取得方法


(過去ログ 173 を表示中)

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

■99508 / inTopicNo.1)  ディスプレイ外のフォーム右上端の座標の取得方法
  
□投稿者/ おうち (1回)-(2022/04/20(Wed) 11:14:28)

分類:[VB.NET/VB2005 以降] 

PCディスプレイの画面に収まりきらず、スクロールバー表示されいる場合で、
フォームの右上端の座標を取得する方法を教えていただきたいです。

Me.Size
Me.DesktopBounds
Me.Location

では、欲しい座標が取得できませんでした。

言葉だと伝わりずらいので、手書きですが、以下URLの図を参考にしていただければと思います。

■イメージ画像
https://d.kuku.lu/756a133f8


取得した値を使って計算で座標を求める、という方法でも構いません。
どなたかわかる方、教えていただけないでしょうか?
引用返信 編集キー/
■99509 / inTopicNo.2)  Re[1]: ディスプレイ外のフォーム右上端の座標の取得方法
□投稿者/ radian (30回)-(2022/04/20(Wed) 11:47:26)
2022/04/20(Wed) 12:00:04 編集(投稿者)

No99508 (おうち さん) に返信
> PCディスプレイの画面に収まりきらず、スクロールバー表示されいる場合で、
> フォームの右上端の座標を取得する方法を教えていただきたいです。

そもそもフォームがディスプレイに収まらないからスクロールバーが出るって事はないとは思うんですけど。その手書きの図でも、フォーム右上のコントロールボックス(_□×)がディスプレイ内に収まっていますから、ディスプレイ外に出てないですよね?

AutoScroll=Trueに設定すると、コントロールがフォームのクライアント領域外に出た場合は表示されますけど。
ただ、その場合もフォームのサイズ自体は変わらないですよ。

引用返信 編集キー/
■99510 / inTopicNo.3)  Re[2]: ディスプレイ外のフォーム右上端の座標の取得方法
□投稿者/ おうち (2回)-(2022/04/20(Wed) 12:14:17)
No99509 (radian さん) に返信

> そもそもフォームがディスプレイに収まらないからスクロールバーが出るって事はないとは思うんですけど。その手書きの図でも、フォーム右上のコントロールボックス(_□×)がディスプレイ内に収まっていますから、ディスプレイ外に出てないですよね?
>
> AutoScroll=Trueに設定すると、コントロールがフォームのクライアント領域外に出た場合は表示されますけど。


おっしゃる通りで、この手書きの図は、
AutoScroll=Trueに設定していて、コントロールがフォームのクライアント領域外に出ている場合です。
なので、ディスプレイ外に出ています。わかりずらくてすみません。


> ただ、その場合もフォームのサイズ自体は変わらないですよ。

そのフォームのサイズを取得する方法があれば、教えていただきたいです。
設計時のサイズ実数値を使用すればすぐ解決はするんですが…。
引用返信 編集キー/
■99511 / inTopicNo.4)  Re[3]: ディスプレイ外のフォーム右上端の座標の取得方法
□投稿者/ radian (31回)-(2022/04/20(Wed) 13:18:54)
>>ただ、その場合もフォームのサイズ自体は変わらないですよ。
> 
> そのフォームのサイズを取得する方法があれば、教えていただきたいです。
> 設計時のサイズ実数値を使用すればすぐ解決はするんですが…。

どうも会話がかみ合ってない気がするんですが、
フォームのサイズを取得するだけならSizeプロパティで取得出来ます。
本当に欲しいのは、フォーム内に含まれる全コントロールの
最も右端のクライアント座標なんじゃないですか?

Dim rightMax = Me.ClientSize.Width
For Each ctl As Control In Me.Controls
    rightMax = Math.Max(rightMax, ctl.Right)
Next
Debug.WriteLine(rightMax)

引用返信 編集キー/
■99512 / inTopicNo.5)  Re[4]: ディスプレイ外のフォーム右上端の座標の取得方法
□投稿者/ おうち (4回)-(2022/04/20(Wed) 13:47:19)
No99511 (radian さん) に返信

> フォームのサイズを取得するだけならSizeプロパティで取得出来ます。

Sizeプロパティで取得できたのは、ディスプレイで見える領域の右端までのサイズでした。
取得したいのは、ディスプレイからはみ出した領域も含めた右端までのサイズです。


> 本当に欲しいのは、フォーム内に含まれる全コントロールの
> 最も右端のクライアント座標なんじゃないですか?
>
> Dim rightMax = Me.ClientSize.Width
> For Each ctl As Control In Me.Controls
> rightMax = Math.Max(rightMax, ctl.Right)
> Next
> Debug.WriteLine(rightMax)
>

いえ、違います。コードまで書いてくださったのにすみません。
最終的にしたいことは少し複雑なので省いていましたが…説明したほうがよいでしょうか?

引用返信 編集キー/
■99513 / inTopicNo.6)  Re[5]: ディスプレイ外のフォーム右上端の座標の取得方法
□投稿者/ おうち (5回)-(2022/04/20(Wed) 14:00:42)
もしかして、取得できないのは、継承しているフォームだからでしょうか?
Sizeプロパティでも元のサイズしか取得できない、とか。

継承先のフォームのサイズを変更していて、
継承元のフォームはサイズの変更をしていないので。

継承先の横幅は1900ですが、継承元の横幅は1300のままです。
引用返信 編集キー/
■99514 / inTopicNo.7)  Re[6]: ディスプレイ外のフォーム右上端の座標の取得方法
□投稿者/ radian (32回)-(2022/04/20(Wed) 14:14:51)
2022/04/20(Wed) 14:25:43 編集(投稿者)

> 最終的にしたいことは少し複雑なので省いていましたが…説明したほうがよいでしょうか?

情報を小出しにすると、結局あなたが本当にやりたい事を誰も理解出来ないし、
何度も確認する事になり無駄な時間を取る事になるので、
出せる情報は出して、赤の他人でも判るようにきちんと説明してください。
可能なら、新規にプロジェクトを作成して
現象を再現可能な必要最小限のソースを提示し、
画像も、手書きではなくスクリーンショットが良いでしょう。
開発中のプログラムの一部でしか現象が再現出来ないのであれば、
他の処理により不具合が発生している事も十分考えられます。


No99513 (おうち さん) に返信
> もしかして、取得できないのは、継承しているフォームだからでしょうか?
> Sizeプロパティでも元のサイズしか取得できない、とか。
>
> 継承先のフォームのサイズを変更していて、
> 継承元のフォームはサイズの変更をしていないので。
>
> 継承先の横幅は1900ですが、継承元の横幅は1300のままです。

継承元の実装が判らないので何ともいえないです。
少なくとも、素のFormならディスプレイ外にはみ出そうが
正しいSizeを返します。
引用返信 編集キー/
■99515 / inTopicNo.8)  Re[7]: ディスプレイ外のフォーム右上端の座標の取得方法
□投稿者/ おうち (6回)-(2022/04/20(Wed) 14:42:35)
No99514 (radian さん) に返信

そうですね。
おっしゃる通りなんですが、もう少し柔らかい表現を使ってくださると助かります。

表題の座標を取得方法はわからなかったですが、別の方法で目的が達成できたので締めます。
ありがとうございました。

解決済み
引用返信 編集キー/
■99516 / inTopicNo.9)  Re[5]: ディスプレイ外のフォーム右上端の座標の取得方法
□投稿者/ 魔界の仮面弁士 (3331回)-(2022/04/20(Wed) 16:47:35)
No99510 (おうち さん) に返信
> おっしゃる通りで、この手書きの図は、
> AutoScroll=Trueに設定していて、コントロールがフォームのクライアント領域外に出ている場合です。

その場合、破線はタイトルバーの上辺からではなく、
タイトルバーの下辺から生やすべきな気もします。

本当にタイトルバーの上辺で良いのなら、Y 座標は Form の Top で良いと思います。

あるいは、垂直スクロールが含まれる場合、スクロール位置に応じて
計測したい右上座標が上方向に変化して欲しいのでしょうか。

スクロール位置に応じて変わるのであれば、
X 座標については、RectangleToScreen(DisplayRectangle).Right あたりかな?

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
 Text = RectangleToScreen(DisplayRectangle).ToString()
End Sub


No99512 (おうち さん) に返信
>本当に欲しいのは、フォーム内に含まれる全コントロールの
>最も右端のクライアント座標なんじゃないですか?

仮にそうだとしても、AutoScrollMargin あたりも考慮する必要がありそう。
解決済み
引用返信 編集キー/
■99517 / inTopicNo.10)  Re[6]: ディスプレイ外のフォーム右上端の座標の取得方法
□投稿者/ radian (33回)-(2022/04/20(Wed) 18:13:02)
2022/04/20(Wed) 18:13:28 編集(投稿者)

No99516 (魔界の仮面弁士 さん) に返信
> >本当に欲しいのは、フォーム内に含まれる全コントロールの
> >最も右端のクライアント座標なんじゃないですか?
>
> 仮にそうだとしても、AutoScrollMargin あたりも考慮する必要がありそう。

情報不足すぎたので、とりあえず探りを入れる為で細かいとこは省きました。
まあ自己解決されたようなので、これ以上聞く事もないですけど。


No99515 (おうち さん) に返信
> おっしゃる通りなんですが、もう少し柔らかい表現を使ってくださると助かります。

(柔らかい表現って、どの程度を期待しているんだろう)
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -