Более быстрый / чистый способ вычисления ширины / слева от текстового поля в зависимости от того, сколько отображается

Привет всем, я в настоящее время ищу способ рассчитать ширину и левое положение MAX 12 TXTbox в моей форме отчета. Высота всегда будет 0.206, а вершина всегда будет 0.

Вот как выглядит код с 12 (max) txtboxes:

txtData1.Width = 0.7
txtData1.Left = 0

txtData2.Width = 0.7
txtData2.Left = 0.708

txtData3.Width = 0.7
txtData3.Left = 1.416

txtData4.Width = 0.7
txtData4.Left = 2.124

txtData5.Width = 0.7
txtData5.Left = 2.832

txtData6.Width = 0.7
txtData6.Left = 3.54

txtData7.Width = 0.7
txtData7.Left = 4.248

txtData8.Width = 0.7
txtData8.Left = 4.956

txtData9.Width = 0.7
txtData9.Left = 5.664

txtData10.Width = 0.7
txtData10.Left = 6.372

txtData11.Width = 0.7
txtData11.Left = 7.08

txtData12.Width = 0.7
txtData12.Left = 7.788

Согласно моим расчетам (которые я люблю математику... математика просто не любит меня:o)) общая ширина будет 8,4 дюйма, а оставшаяся 7,788 дюйма. Ширина листа 8,5 (альбомная ориентация).

расположение

Так что теперь трудная часть вступает в игру. Для 11 ящиков ширина увеличилась бы немного, и левая позиция также поднялась бы, чтобы разместить дополнительное пространство, не имеющее 12-го ящика больше.

Я пытаюсь найти хороший способ сделать это с минимальным кодом, так как я знаю, что могу сделать то же самое, что и выше для каждого уровня (от 12 до 2 текстовых полей), но это было бы много кода.

Так что любая помощь в расчете оставшихся 11-2 текстовых полей будет большой помощью!: О)

1 ответ

Решение

Я не уверен, что полностью понимаю ваш вопрос, но я понимаю, что вы всегда хотите, чтобы текстовые поля полностью заполняли 8,5 дюйма.

Если это так, я бы сделал следующее:

    Dim NumberOfBoxes As Integer = 11 ' Number of textboxes you'll have next to each other
    Dim AssignedWidthPerBox As Double = 8.5 / NumberOfBoxes
    Dim CurrentLeft As Double = 0   ' How Far left you are on your form - Increment this by AssignedWidthPerBox for each textbox

Затем вы назначаете свойства Textbox либо через цикл (предпочтительно), либо вручную следующим образом:

    txtData1.Width = AssignedWidthPerBox
    txtData1.Left = CurrentLeft
    CurrentLeft += AssignedWidthPerBox

Надеюсь это поможет

Другие вопросы по тегам