23844


お世話になります。

フォームの基本クラスでボタンなどをフォームの右下に張り付け、Anchorを  
Bottom,Rightにし、それを継承したフォームでClientSizeを操作すれば、  
その大きさに合わせて張り付けたボタンなども右下に配置されると思っていたのですが、  
実際は継承したフォームでは、開始位置が継承先と同じ座標に現れ、  
サイズを変更すると、ズレた位置からAnchorの設定どおりに動いてしまいます。

そのため、今まではいつも継承した後はデザイン画面からズルズルと  
手動で右下に移動させているのですが、さすがに嫌になりました。

考えてみれば、確かにこの動きは当たり前かもしれませんが、希望としては  
継承先でも、継承元でAnchorにBottom,Rightになっているようなら、  
開始直後でも配置先を右下からの相対位置にしたいものです。

これらのことは、既存のプロパティか何かでできるものでしょうか。  
もしくは、他に何か方法があるのでしょうか。

打開策があるようでしたらお教えください。

よろしくお願いします。

[![画像の説明をここに入力](https://i.stack.imgur.com/AC7DA.png)](https://i.stack.imgur.com/AC7DA.png)


CC BY-SA 3.0
2016-04-08T07:24:59.283
23841
2016-09-03T00:41:51.057
2016-09-03T00:41:51.057
4236
9374
question
c# visual-studio winforms
C# C継承先のフォームでコントロールがズレる


継承元フォームの内容をフォームではなくユーザーコントロールとして実装してみてはいかがでしょうか。

  1. 新規にユーザーコントロール作成しForm1が持っているUIと機能を移植
  2. Form2（継承先フォーム）をForm1ではなくSystem.Windows.Forms.Formを継承する形に戻す
  3. Form2のデザイナで作成したユーザーコントロールを配置し、Dock=Fillとする。
  4. Form1は不要となるので削除する


CC BY-SA 3.0
2016-04-08T08:05:44.183
23844
2016-04-08T08:05:44.183
4850
23841
answer


(コメントで指摘があったので追記しました)  
以下の内容は、 **継承元フォームのボタンに派生クラスがアクセスできる** 前提です

継承元をどうやって指定（変更）してるのかわかりませんが  
VS2015のテンプレートだと、継承されたフォーム
というのがあります。これで継承元を指定しても、フォームのサイズは継承元のままのようですのでボタン位置はずれませんね

通常のフォームとして追加して、継承元を変えた場合  
フォームのサイズを指定してなければ、継承元を変えた段階でフォームのサイズも継承元のサイズになりましたので、これもボタン位置がずれるということはなさそうですが

ただし、一度でもサイズ変更してから継承元を変えると、その段階でフォームのサイズが上書きされるがボタン位置はそのままなので、位置がずれますね

テンプレートに継承されたフォームが無いようであれば、フォームを追加した後真っ先に継承元を変えてからサイズ変更するようにすればよいのではないでしょうか  
（VS2015で確認したので他のバージョンだとまた違う動作かもしれませんが）


CC BY-SA 3.0
2016-04-08T17:13:32.633
23860
2016-04-09T18:01:03.993
2016-04-09T18:01:03.993
9811
9811
23841
answer