The following Code shows you a method (written by me) which calculates the possible Fontsize for a given Size - I think you can easily change it to a Rectangle :
Function GetFontSizeMatch(ByVal myText As String, ByVal myFont As Font, ByVal mySize As Size) As Single
If Trim(myText).Length <= 0 Then myText = "X"
Dim currentSize As Single = CSng(myFont.Size)
Dim workFont As Font = New Font(myFont.Name, currentSize, myFont.Style)
Dim myTextSize As SizeF
If (mySize.Width >= 1) AndAlso (mySize.Height >= 1) Then
Do
currentSize += 4.0 : If currentSize > 50.0 Then Exit Do
workFont = New Font(workFont.Name, currentSize, workFont.Style)
myTextSize = TextRenderer.MeasureText(myText, workFont)
Loop Until (myTextSize.Width > mySize.Width) Or (myTextSize.Height > mySize.Height)
Do
currentSize -= 0.5 : If currentSize < 5.0 Then Exit Do
workFont = New Font(workFont.Name, currentSize, workFont.Style)
myTextSize = TextRenderer.MeasureText(myText, workFont)
Loop Until (myTextSize.Width <= mySize.Width) AndAlso (myTextSize.Height <= mySize.Height)
End If
Return currentSize
End Function
There are 2 loops inside the Function. The first loop increases the Fontsize from your string as long as it reaches one of the bounds (with large steps). The second loop decreases the Fontsite with small steps to match inside the give Size. The result of this function is the maximum possible Fontsize for the given Size.
Good Luck ...