2017-07-19 61 views
0

レポートのテキストボックスコントロールでフォントサイズを動的に設定すると、テキストボックスの内容がそのサイズに収まるようになりますか? 私の考えは次の関数の値に基づいて、ループ内でのフォントサイズを小さくすることでした:テキストボックスのサイズに合わせて、C#ローカルレポート(rdlc - WinForms)でフォントサイズを動的に設定する方法は?

Private Function IsContentsBiggerThanTextBox(ByVal textBox As TextBox) As Boolean 
    Dim size As Size = TextRenderer.MeasureText(textBox.Text, textBox.Font) 
    Return ((size.Width > textBox.Width) OR (size.Height > textBox.Height)) 
End Function 

問題は、私はレポートのテキストボックスの参照を関数に渡す方法がわからないです。

答えて

0

ローカルのrdlcレポートで動作するコードを見つけようと試みた後、最終的には、テキストボックスコントロールのテキストサイズに応じて動的にフォントサイズを調整する関数を作成しました。この考え方は、固定寸法のテキストボックスコントロールのテキストサイズを測定することです。テキストの高さがテキストボックスコントロールの高さよりも高い場合は、テキストがコントロールに収まるまでフォントのサイズを縮小します。

まず、レポートプロパティでSystem.Drawingへの参照を追加する必要があります。

rdlcのすべてのコードは、vb.netで書かれている必要があります。レポートプロパティのCodeフィールドでは、これらの機能を追加します。そのフォントサイズ、あなたが動的とのFontSizeプロパティで変更したい

'1cm = 37.79527559055 pixels 
Const cmToPx as Single = 37.79527559055F 

Public Function setMaxFont(Text as string, boxWidth as Single, boxHeight as 
Single, FontMax as Integer, FontMin as Integer) as String 
    Dim i as Integer 
    For i = FontMax to FontMin Step -1 
     If IsTextSmaller(Text, i, boxWidth, boxHeight) Then 
      Exit For 
     End If 
    Next 
    return i & "pt" 
End Function 


Private Function IsTextSmaller(Text as String, fontValue as Integer, boxWidth as Single, boxHeight as Single) as Boolean 
    Dim stringFont As New System.Drawing.Font("Arial", fontValue) 
    Dim stringSize As New System.Drawing.SizeF 
    Dim boxSize as New System.Drawing.SizeF(boxWidth * cmToPx, boxHeight * cmToPx * 10) 'we set box height bigger than textbox that we check 
    Dim bitmap as System.Drawing.Bitmap = New System.Drawing.Bitmap(1, 1) 
    Dim g As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(bitmap) 
    g.PageUnit = System.Drawing.GraphicsUnit.Pixel 
    stringSize = g.MeasureString(Text, stringFont, boxSize) 
    bitmap = Nothing 
    return stringSize.Height < (boxHeight * cmToPx) 
End Function 

選択TextBoxコントロールを以下のコードを追加します。

= Code.SetMaxFont(TextBox.Value, WidthOfTextBox, HeightOfTextBox, MaxFontSize, MinFontSize) 

幅とテキストボックスの高さがなければなりませんセンチメートル単位で入力してください。テキストボックスのCanGrowプロパティとCanShrinkプロパティはFalseに設定する必要があります。

関連する問題