2010-12-14 11 views
0

件名として説明しています。オーバーライドされたOnPaintメソッドでImageAlign.MiddleCenterを実現する方法

は、私は、.NET

私はボタンのOnPaintイベントをオーバーライドしていますにボタン コントロールのイメージのプロパティでの動作ImageAlign.MiddleCenterを達成したいです。 私はe.Graphics.DrawImage(Image、oDrawRectagle);を使用します。 ボタンコントロール内に画像をペイントする。 しかし、これは常にボタンの左側に表示されます。 oDrawRectagleは常にClientRectangleの0,0座標を返します。

画像を常に整列させたいImageAlign.MiddleCenter。どのように私はそれを達成するのですか?

おかげ

protected override void OnPaint(PaintEventArgs e) 
      { 
       Graphics g = e.Graphics; 

       int iHeight; 
       int iWidth; 

       if (Image != null) 
       { 
        //newSize = MaintainAspectRatio(Image, ClientRectangle.Width, ClientRectangle.Height); 
        //iHeight = newSize.Height; 
        //iWidth = newSize.Width; 
        Rectangle ResizedRectangle = MaintainAspectRatio(Image,ClientRectangle); 
        iHeight = ResizedRectangle.Height; 
        iWidth = ResizedRectangle.Width; 

       } 
       else 
       { 
        iWidth = ClientRectangle.Width; 
        iHeight = ClientRectangle.Height; 
       } 

       g.FillRectangle(new SolidBrush(Color.FromArgb(213, 221, 224)), ClientRectangle); 

       // Draw border 
       Color oLeftTopColor = SystemColors.ControlLightLight; 
       Color oRightBottomColor = SystemColors.ActiveCaption; 
       Pen oLeftTopPen = new Pen(oLeftTopColor); 
       Pen oRightBottomPen = new Pen(oRightBottomColor); 
       // top line 
       g.DrawLine(oLeftTopPen, 0, 0, iWidth - 1, 0); 
       //g.DrawLine(new Pen(SystemColors.ControlLight), 1, 1, iWidth-2, 1); 
       // bottom line 
       g.DrawLine(oRightBottomPen, 0, iHeight, iWidth - 1, iHeight); 
       //g.DrawLine(new Pen(SystemColors.ControlDark), 1, iHeight-2, iWidth-2, iHeight-2); 
       // right line 
       g.DrawLine(oRightBottomPen, iWidth, 0, iWidth, iHeight - 1); 
       //g.DrawLine(new Pen(SystemColors.ControlDark), iWidth-2, 1, iWidth-2, iHeight-2); 
       // left line 
       g.DrawLine(oLeftTopPen, 0, 0, 0, iHeight - 1); 
       //g.DrawLine(new Pen(SystemColors.ControlLightLight), 1, 1, 1, iHeight-2); 

       // Draw image 
       if (Image != null) 
       { 
        //Rectangle oDrawRectagle = new Rectangle(
        // 8, 5, iWidth - 20, iHeight - 10); 
        Rectangle oDrawRectagle = new Rectangle(
         0, 0, iWidth, iHeight); 
        if (Enabled == false) 
        { 
         e.Graphics.DrawImage(Image, oDrawRectagle, 
          0, 0, Image.Width, Image.Height, 
          GraphicsUnit.Pixel); 
        } 
        else 
        { 
         e.Graphics.DrawImage(Image,oDrawRectagle); 

        } 
       } 

       // Draw text 
       if (Text != null) 
       { 
        int iTextTop = 5; 
        int iTextLeft = 5; 
        int iMaxTextWidth = iWidth - 10; 
        int iMaxTextHeight = iHeight - 10; 
       } 
      } 

答えて

4

あなただけ手動でボタンのサイズや画像サイズを使用して中央に位置を変更することができます。

oDrawRectangle = new Rectangle(this.Width/2 - iWidth/2, this.Height/2 - iHeight/2, iWidth, iHeight); 
関連する問題