実現したいこと
C#でフォームの全体サイズではなく、アイテムが置けるサイズを800,600にします。
816, 639にすると、綺麗に800,600になります。
panelアイテムを、親コンテナにドッキングすると使いpanelを見ると800,600になります。
このように、アイテムが置ける部分をオプションで仕様できるようにしたいです。
発生している問題・分からないこと
フォームのアイテムを置くスペースの実数値を知りたい。
そこから自動(プログラム)的に変更された数値を一番近い数値に変えたい。
該当のソースコード
特になし
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
panelアイテムを親コンテナに合わせるとどの位の大きさなのかが分かった。
補足
「Form1.Designer.cs」から
namespace Hit_and_Blow
{
partial class HitAndBlow
{
#region Windows Form Designer generated code
/// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { SuspendLayout(); // // HitAndBlow // AutoScaleDimensions = new SizeF(9F, 21F); AutoScaleMode = AutoScaleMode.Font; AutoScroll = true; ClientSize = new Size(800, 600); // ここ Font = new Font("Yu Gothic UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 128); Margin = new Padding(4); Name = "HitAndBlow"; StartPosition = FormStartPosition.CenterScreen; Text = "Hit & Blow"; Click += HitAndBlow_Click; ResumeLayout(false); } #endregion }
}
// ここ
と書いた、部分(20行目)にNEWされております。
ClientSize だとダメかな?
ClientSizeが指定のサイズ(例えば800x600)になるようにフォームのサイズを変更したい
という内容ととらえて回答したのですが合っていますか?
Form設定後、ユーザーがFormをを変更し終えた時に一番近い4:3、もしくは16:9にしようと考えております。
fana様
やってみます。
YAmaGNZ様
私が触っていない部分、
public HitAndBlow()
{
InitializeComponent();
}
InitializeComponent();にnewして生成して初期化しているともうのですが、ゲーム上でもユーザーがトップFormに行ったときにリセットボタンを押したら、初期化したいです。
お二人とも返事が遠くなり申し訳ありません。
>Form設定後、ユーザーがFormをを変更し終えた時に一番近い4:3、もしくは16:9にしようと考えております。
おっしゃっていることがよく分かりません。
Form設定後とはどのタイミングですか?実行している間に何かしらの設定画面があってその設定が完了したタイミングということですか?
ユーザーがFormを変更とは何を変更するのですか?
4:3もしくは16:9にアスペクト比を固定したいとのことですがこれとClientSizeは何の関係があるのでしょうか?
一番近いということですが、幅と高さのどちらを優先するかなどありそうですがそのあたりはどのようにお考えですか?
>>Form設定後、ユーザーがFormをを変更し終えた時に一番近い4:3、もしくは16:9にしようと考えております。
>おっしゃっていることがよく分かりません。
はい…そうですね。画質の比率の事を申し上げたつもりでしたが伝わらず、すみませんでした。次から気をつけて発言致します。
>Form設定後とはどのタイミングですか?
ユーザーの起動二回目以降の起動時にファイルデータの読み込みを想定しています。ファイルの中に画素数を書いておこうと思ってます。
>実行している間に何かしらの設定画面があってその設定が完了したタイミングということですか?
上記の話に関する話にもなりますが、
システム起動した後、ユーザーに画面が表示される前のタイミングで、フォームの縦幅横幅を変えたいと考えてます。
>ユーザーがFormを変更とは何を変更するのですか?
ユーザーがフォームの解像度を変える事を伝えたかったです。
>4:3もしくは16:9にアスペクト比を固定したいとのことですがこれとClientSizeは何の関係があるのでしょうか?
解像度をを4:3か16:9に固定しようかと思ってます。
>一番近いということですが、幅と高さのどちらを優先するかなどありそうですがそのあたりはどのようにお考えですか?
そこに関してはユーザーに
解像度を変更してからこの大きさでよろしいですか?
と、実際に変更しつつ別ダイアログを表示させてOK.NGを出して決めてもらおうと思ってます。
>ユーザーがフォームの解像度を変える
とありますが、フォームの大きさを変更するという行為は画面端をマウスでドラッグして大きさを変更するという行為もあります。
これのことを言っているのでしょうか?
>システム起動した後、ユーザーに画面が表示される前のタイミングで、フォームの縦幅横幅を変えたいと考えてます。
起動時に設定した大きさで表示するというのは分かるのですが、ではその設定というのはいつ変更するのでしょうか?
変更時に即時反映する必要があるのでしょうか?
>解像度を変更してからこの大きさでよろしいですか?と、実際に変更しつつ別ダイアログを表示させてOK.NGを出して決めてもらおうと思ってます。
例えばフォームの大きさが600x600だったとして4:3のアスペクト比にする場合
縦を優先するのであればフォームの大きさは800x600となります。
横を優先するのであればフォームの大きさは600x450となります。
これのどちらを選択するのですか?
私の回答で不足があるのでしょうか?あなたが思っていることと異なるのであれば何が異なるのかを説明していただければ他の方法なりを提示できるのではないかと思います。
Q「>ユーザーがフォームの解像度を変える
とありますが、フォームの大きさを変更するという行為は画面端をマウスでドラッグして大きさを変更するという行為もあります。
これのことを言っているのでしょうか?」
A はい、その認識であっております。
Q「
>システム起動した後、ユーザーに画面が表示される前のタイミングで、フォームの縦幅横幅を変えたいと考えてます。
起動時に設定した大きさで表示するというのは分かるのですが、ではその設定というのはいつ変更するのでしょうか?
変更時に即時反映する必要があるのでしょうか?」
A ありませんが、なんとなく考えているだけなので気にしないでください。
Q「>解像度を変更してからこの大きさでよろしいですか?と、実際に変更しつつ別ダイアログを表示させてOK.NGを出して決めてもらおうと思ってます。
例えばフォームの大きさが600x600だったとして4:3のアスペクト比にする場合
縦を優先するのであればフォームの大きさは800x600となります。
横を優先するのであればフォームの大きさは600x450となります。
これのどちらを選択するのですか?」
A まだ決めてないので今質問に答える事ではないかと思います。メインの質問がFormの大きさが実際Sizeとthis.ClientSizeで差がありますねーくらい簡単にとらえてもらってかまわないかと思いますが。
Q「私の回答で不足があるのでしょうか?あなたが思っていることと異なるのであれば何が異なるのかを説明していただければ他の方法なりを提示できるのではないかと思います。」
A 不足はないです。不穏な空気出すのやめてもらっていいですか?空気読めますか?
終わった質問に質問して俺スゲーできてすごいのですが、製作するのはそちらならいろいろ決めるために話すと思うんですよ。で、実際どうだかわかってもらえました(空気読めた)でしょうか。
回答に必要な情報があればご指摘ください。
> フォームのアイテムを置くスペースの実数値を知りたい。
> そこから自動(プログラム)的に変更された数値を一番近い数値に変えたい。
端的な回答
ClientSizeで取得も設定もできます。
[Form.ClientSize プロパティ (System.Windows.Forms) | Microsoft Learn](https://learn.microsoft.com/ja-jp/dotnet/api/system.windows.forms.form.clientsize)
知りたいときに好きに表示して、変えたいときに好きに設定してください。
InitializeComponent();
Debug.WriteLine(ClientSize);
ClientSize = new Size(800, 600);
>> 私の回答で不足があるのでしょうか?あなたが思っていることと異なるのであれば何が異なるのかを説明していただければ他の方法なりを提示できるのではないかと思います。
> 不足はないです。
> 終わった質問に質問して
解決したのであれば、ベストアンサーボタンをクリックしてください。
[ヘルプ|質問を解決済みにしたい](https://teratail.com/help#resolve-question)
回答のコメントに「ベストアンサーに選ばせていただきました。」とあるのに「ベストアンサー」にできていないので、まだ何か問題があるだろうと思って回答者は色々聞いているわけです。
回答者は別に質問者や質問者が作ろうとしているプログラムを詮索する気も興味もありません。
困っている人がいて自分は回答できそうだなと思うから、善意で回答しているだけです。
> 回答に必要な情報があればご指摘ください。
個人的な感想です(turnberryさんを責めているのではなく、第3者から見た質問の見え方というか質問の仕方について)
余計な情報が多く、肝心な情報がない気がします。
わたしは当初Visual StudioのデザイナのプロパティでClientSize変えたい。
できないにしてもClientSize(800, 600)に対応する、Size(816, 639)をぱっと知りたい。
ような話かと思っていました(それ用の動画も作っていました^^;
しかし
>> ClientSize だとダメかな?
> やってみます。
の進捗はなく、アス比の話や設定等にずれていっているように見えました。
本当にやりたいことが「アス比固定のままリサイズできるフォーム」であるなら、安直にやるとちらつきますしちゃんとやると急に難しくなったりします。
わたしはまだ「本当にやりたいこと」が、なんなのかわかっていません。
[XY問題 - Wikipedia](https://ja.wikipedia.org/wiki/XY%E5%95%8F%E9%A1%8C)
>ClientSizeで取得も設定もできます。
>知りたいときに好きに表示して、変えたいときに好きに設定してください。
これをベストアンサーにしたいので解答欄にご記入いただけないでしょうか。
計算して値を持っているよりもスマートで好きです。
>回答のコメントに「ベストアンサーに選ばせていただきました。」とあるのに「ベストアンサー」にできていないので、まだ何か問題があるだろうと思って回答者は色々聞いているわけです。
申し訳ありません。ベストアンサーを押したつもりが、押していない反応になっておりました。こればかりは私の落ち度です。大変申し訳ございません。
>わたしはまだ「本当にやりたいこと」が、なんなのかわかっていません。
できればアスペクト比を使いつつ、フォームの大きさを決めたい。大きさはアスペクト比で決められた数字にしたいです。しかし、ユーザーがそれを求めないのであれば、ユーザーの好きな数字にしたい。
アスペクト比でフォームの大きさを決める。しかし、ユーザーが大きさを決めたいのならそちらを優先する。
クライアントサイズ部分以外を含め、アスペクト比につけるのか分からない部分があります。

回答2件
あなたの回答
tips
プレビュー