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

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

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

Re[2]: PanelクラスのPuddingプロパティについて


(過去ログ 144 を表示中)

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

■84271 / inTopicNo.1)  PanelクラスのPuddingプロパティについて
  
□投稿者/ こんた (3回)-(2017/06/06(Tue) 20:51:46)

分類:[C#] 

Panelにコントロールを追加するときのpanelの余白部分を設定したいのですが下記のコードだとうまくいきません。
やりたいこととしては例えば、panelのpuddingプロパティを 10 に設定した後にpictureBoxやbuttonコントロールをpanelに追加すると、
追加したコントロールのサイズは変えずに、locationを (10, 10)になるようにしたいです。
添削お願いします。

class myPanel : Panel
{
    public myPanel()
    {
        Size = new Size(200, 100);
        BorderStyle = BorderStyle.FixedSingle;
        Padding = new Padding(10);

        //アイコン
        PictureBox icon = new PictureBox();
        Controls.Add(icon);
        icon.Size = new Size(60, 60);
        icon.BackColor = Color.Blue;
    }
}

引用返信 編集キー/
■84272 / inTopicNo.2)  Re[1]: PanelクラスのPuddingプロパティについて
□投稿者/ 魔界の仮面弁士 (1314回)-(2017/06/06(Tue) 21:44:00)
No84271 (こんた さん) に返信
> PanelクラスのPuddingプロパティについて
> panelのpuddingプロパティを 10 に設定した後に
Padding (詰め物)が
Pudding (プリン)に…。(^^;

それと、大文字小文字の違いも留意した方が良いですよ。
VB であれば同一視されますが、C# では別物として扱われます。


> 追加したコントロールのサイズは変えずに、locationを (10, 10)になるようにしたいです。
2 つ目以降のコントロールの座標をどうするのかが気になるところですが、それはさておき。

Padding は、子コントロールの Dock プロパティが設定されていた場合に影響を与えます。
DockStyle.None の場合は個別に座標指定が必要です。


対処方法としては:

(案1) Panel からではなく、FlowLayoutPanel から継承させるようにする。

class myPanel : FlowLayoutPanel
{
 //
}


(案2) myPanel の OnControlAdded メソッドをオーバーライドして座標を調整する。

protected override void OnControlAdded(ControlEventArgs e)
{
  if(e.Control.Dock == DockStyle.None)
  {
    e.Control.Location = new Point(Padding.Left, Padding.Top);
  }
  base.OnControlAdded(e);
}

引用返信 編集キー/
■84273 / inTopicNo.3)  Re[2]: PanelクラスのPuddingプロパティについて
□投稿者/ こんた (4回)-(2017/06/06(Tue) 21:51:46)
No84272 (魔界の仮面弁士 さん) に返信

誤字脱字申し訳ありません…


> 対処方法としては:
>
> (案1) Panel からではなく、FlowLayoutPanel から継承させるようにする。
>
> class myPanel : FlowLayoutPanel
> {
>  //
> }
>
>
> (案2) myPanel の OnControlAdded メソッドをオーバーライドして座標を調整する。
>
> protected override void OnControlAdded(ControlEventArgs e)
> {
>   if(e.Control.Dock == DockStyle.None)
>   {
>     e.Control.Location = new Point(Padding.Left, Padding.Top);
>   }
>   base.OnControlAdded(e);
> }
>

案2のOnControlAdded メソッドをオーバーライドする方法でいけました!
ありがとうございます。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -