質問者
特定の設定をしたPanelを持つFormを継承すると、画面からボタンが消える。

質問
-
Windowsフォームアプリケーションの開発で、フォームを継承したフォームのボタンが表示されない現象を確認しました。
試した環境は以下です。
Windows Server 2016, Visual Studio 2017 Professional
現象の確認手順です。
1. プロジェクトへwindows フォーム追加(便宜上、BaseForm)
2. BaseFormへPanelを追加し、プロパティ「Modifers」を「Freinds」、「Dock」を「Top」と設定
3. そのパネルへButtonを追加し、「Modifers」を「Protected」、「Anchor」を「Top Right」と設定
4. プロジェクトへ新たにwindows フォーム追加(便宜上、Form1)
5. Form1にBaseFormを継承させ、WidthをBaseFormより大きく設定
6. スタートアップフォームをForm1に設定
デバッグして表示されるForm1に、ボタンが表示されないことを確認できます。 ※デザインには表示されています。
これは禁じ手なのでしょうか?
すべての返信
-
個人的な印象ですが、継承フォーム、継承ユーザーコントロールは多用しない方が良いです。
今回の事例だと、Button1 がまず Form2 レイアウト時の Location に設定され、次に Form が広げられるようなコードが生成されます。
このコードだと、Form1 と同じサイズの時点で Button1 が右が面外に消え、その後、Form2 の幅に広げられるため、さらに画面外に消えるという動きになります。ゆえに、Modifieres = Protected、Anchor = Right(や Bottom)、継承フォームという3つの条件が成り立つ限り、やりたいことはできないと言うことになります。
(Designer.vb を書き換えれば一時的に解決できますが、フォームを少し触るだけで元に戻るので、事実上できないと表現しました)'メモ: 以下のプロシージャは Windows フォーム デザイナーで必要です。 'Windows フォーム デザイナーを使用して変更できます。 'コード エディターを使って変更しないでください。 <System.Diagnostics.DebuggerStepThrough()> _ Private Sub InitializeComponent() Me.SuspendLayout() ' 'Button1 ' Me.Button1.Location = New System.Drawing.Point(450, 33) ' 'Form2 ' Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 12.0!) Me.ClientSize = New System.Drawing.Size(698, 261) Me.Name = "Form2" Me.ResumeLayout(False) End Sub
- 編集済み AzuleanMVP, Moderator 2017年12月10日 7:26
- 回答の候補に設定 立花楓Microsoft employee, Moderator 2017年12月14日 2:08