Если graphics.Measurestring не работает для вас, другой вариант состоит в том, чтобы буквально измерить размер определенных шрифтов, чтобы вы знали, сколько букв помещается на строке, а затем могли бы определить, сколько строк будет в данном прямоугольнике. и соответственно измените размер прямоугольника, используя что-то вроде yVal = lineCount * 5.
Если я правильно помню, я не мог по какой-то причине использовать функцию измеряемой строки, поэтому пришлось делать это неуклюжим образом, но она очень хорошо работала в моей ситуации, когда у меня было несколько ящиков разных размеров.