2017-07-10 11 views
0

私はthis解決策を見つけたので、WinFormsボタンにテキストとして2行を挿入する必要があります。私は上記の最初の行を黒色で印刷する必要があり、2行目は最初の行を赤色で印刷する必要があります。私の問題は、背景の矩形は透明ではないということです。透明になるためには背景の矩形が必要なので、私はいくつかの改善を行ったが、成功しなかった。また、最初の行は中央ではなく(垂直)上に印刷され、2行の間の距離(行間)はあまりにも離れています。私もそれを減らし、ボタン内の2つの線を垂直に配置したいと思います。コードの下に。WinForms:2つの行が1つずつあるボタン

private void TextButton(Button btn, string line1, string line2) 
    { 
     btn.Text = String.Empty; 
     Bitmap bmp = new Bitmap(btn.ClientRectangle.Width, btn.ClientRectangle.Height); 

     using (Graphics G = Graphics.FromImage(bmp)) 
     { 
      G.Clear(btn.BackColor);    

      StringFormat SF = new StringFormat();    
      SF.Alignment = StringAlignment.Center; 
      SF.LineAlignment = StringAlignment.Near; 
      using (Font tahoma = new Font("Tahoma", 15.75F, System.Drawing.FontStyle.Bold)) 
      { 
       Rectangle RC = btn.ClientRectangle;     
       RC.Inflate(-5, -5); 
       G.FillRectangle(Brushes.Transparent,RC.X,RC.Y,RC.Width,RC.Height); 
       G.DrawString(line1, tahoma, Brushes.Black, RC, SF);     
      } 

      using (Font tahoma2 = new Font("Tahoma", 12)) 
      {     
       SF.LineAlignment = StringAlignment.Center; 
       G.FillRectangle(Brushes.Transparent,btn.ClientRectangle.X,btn.ClientRectangle.Y,btn.ClientRectangle.Width,btn.ClientRectangle.Height); 
       G.DrawString(line2, tahoma2, Brushes.Red, btn.ClientRectangle, SF); 
      } 
     } 

     btn.Image = bmp; 
     btn.ImageAlign = ContentAlignment.MiddleCenter; 
    } 
+0

なぜカスタムコントロールを作成しませんか? –

+0

@LeiYangこれはレガシーなプロジェクトなので、ユーザーコントロールを作成すると、このタイプのプロジェクトでは意味がないと思います。このプロジェクトでは、ボタンのDotNetSkin.SkinControlsスタイルが使用されています。 – user1624552

+1

これは試しましたか? http://dotnetrix.co.uk/button.htm – vasek

答えて

0

最後に私は解決しました。私のソリューションの下に。

private void TextButton(Button btn, string line1, string line2) 
{ 
    btn.Text = String.Empty; 
    Bitmap bmp = new Bitmap(btn.ClientRectangle.Width, btn.ClientRectangle.Height); 

    using (Graphics G = Graphics.FromImage(bmp)) 
    { 
     G.Clear(Color.Transparent);   <----- I have set this 
     G.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit; <--- This to avoid bad text within bitmap 
     G.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;  <--- Also this to avoid bad text within bitmap 

     StringFormat SF = new StringFormat();    
     SF.Alignment = StringAlignment.Center; 
     SF.LineAlignment = StringAlignment.Near; 
     using (Font tahoma = new Font("Tahoma", 15.75F, System.Drawing.FontStyle.Bold)) 
     { 
      Rectangle RC = new Rectangle(btn.ClientRectangle.X, btn.ClientRectangle.Y + 30, btn.ClientRectangle.Width, btn.ClientRectangle.Height-30);     
      RC.Inflate(-5, -5); 

      G.DrawString(line1, tahoma, Brushes.Black, RC, SF);     
     } 

     using (Font tahoma2 = new Font("Tahoma", 12)) 
     { 
      Rectangle RC = new Rectangle(btn.ClientRectangle.X, btn.ClientRectangle.Y + 30, btn.ClientRectangle.Width, btn.ClientRectangle.Height-30); 
      RC.Inflate(-5, -5); 
      SF.LineAlignment = StringAlignment.Center;     
      G.DrawString(line2, tahoma2, Brushes.Red, RC, SF); 
     } 
    } 

    btn.Image = bmp; 
    btn.ImageAlign = ContentAlignment.MiddleCenter; 
}