スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

String.Format には色々な書式指定ができる

String.Formatには、C/C++のprintf以上にさまざまな書式指定ができる。

Dim str As String = String.Format("{0}は{1}である。{1}は{2}である。ゆえに{0}は{2}である。", "A", "B", "C")
MessageBox.Show(str)
string_format02.png

Dim str As String = String.Format("軽自動車={0:###,###}円、ベンツ={1:###,###}円", 500000, 20000000)
MessageBox.Show(str)

string_format01.png

Dim str As String = String.Format("現在の日時={0:yyyy/MM/dd HH:mm:ss}", DateTime.Now)
MessageBox.Show(str)

string_format03.png
スポンサーサイト

数値をカンマ編集で文字列に変換

String.Formatで一発でできる。
たったこれだけだ。

Dim str As String = String.Format("{0:###,###}", 12345678)

グラデーションのかかったテキストの描画方法

テキストに簡単なグラデーションをかけて描画することができる。
以下のように、LinearGradientBrushを指定してやれば良い。

Imports System.Drawing.Drawing2D
Public Class Form1
  Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
    Dim rcClient As New Rectangle(0, 0, Me.ClientSize.Width, Me.ClientSize.Height)
    Dim nPoint As Integer = (rcClient.Height / 4) * 72 / e.Graphics.DpiY
    If nPoint <= 0 Then
      Exit Sub
    End If
    Const strText As String = "真ん中"
    Using fnt As New Font("MS UI Gothic", nPoint)
      Dim sizeText As SizeF = e.Graphics.MeasureString(strText, fnt)
      Dim ptText As New PointF((rcClient.Width - sizeText.Width) / 2, (rcClient.Height - sizeText.Height) / 2)
      Using br As New LinearGradientBrush( _
          New Rectangle(ptText.X, ptText.Y, sizeText.Width, sizeText.Height), _
          Color.SkyBlue, Color.Blue, 60)
        e.Graphics.DrawString(strText, fnt, br, ptText.X, ptText.Y)
      End Using
    End Using
  End Sub
  Private Sub Form1_Resize(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Resize
    Invalidate()
  End Sub
End Class


実行結果はこう。
gradationtext.png

ただし、縦方向や横方向、斜め方向など、直線的なグラデーションしか定義できない模様。

文字列をセンタリングして描画する方法 その2

StringFormat を使うより、こちらの方が読みやすく書けて好きだ。

Imports System.Drawing.Drawing2D
Public Class Form1
  Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
    Dim rcClient As New Rectangle(0, 0, Me.ClientSize.Width, Me.ClientSize.Height)
    Dim nPoint As Integer = (rcClient.Height / 4) * 72 / e.Graphics.DpiY
    If nPoint <= 0 Then
      Exit Sub
    End If
    Const strText As String = "真ん中"
    Using fnt As New Font("MS UI Gothic", nPoint)
    Using br As New System.Drawing.SolidBrush(Color.Black)
      Dim sizeText As SizeF = e.Graphics.MeasureString(strText, fnt)
      Dim ptText As New PointF((rcClient.Width - sizeText.Width) / 2, (rcClient.Height - sizeText.Height) / 2)
      e.Graphics.DrawString(strText, fnt, br, ptText.X, ptText.Y)
    End Using
    End Using
  End Sub
  Private Sub Form1_Resize(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Resize
    Invalidate()
  End Sub
End Class


実行結果はその1と同じ。
テキストを画面中央に描画

文字列をセンタリングして描画する方法 その1

テキストを中央を起点に描画するには System.Drawing.Drawing2D.StringFormat を使う。

以下の例では、フォームの中央にテキストを描画している。
フォントサイズは、フォームのサイズによって動的に変更している。

Imports System.Drawing.Drawing2D
Public Class Form1
  Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
    Dim ptCenter As New PointF(Me.ClientSize.Width / 2, Me.ClientSize.Height / 2)
    '画面の高さの1/4をフォントサイズとしてみた
    Dim nPoint As Integer = (Me.ClientSize.Height / 4) * 72 / e.Graphics.DpiY
    If nPoint <= 0 Then
      Exit Sub
    End If
    Const strText As String = "真ん中"
    Using stf As New StringFormat()
    Using fnt As New Font("MS UI Gothic", nPoint)
      stf.Alignment = StringAlignment.Center
      stf.LineAlignment = StringAlignment.Center
      Dim sizeText As SizeF = e.Graphics.MeasureString(strText, fnt, ptCenter, stf)
      Using br As New System.Drawing.SolidBrush(Color.Black)
        e.Graphics.DrawString(strText, fnt, br, ptCenter, stf)
      End Using ' br
    End Using
    End Using
  End Sub
  Private Sub Form1_Resize(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Resize
    Invalidate()
  End Sub
End Class


実行結果はこう。
テキストを画面中央に描画

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。