Muhammad Asim Mughal Ответов: 1

Как сделать автоматическое управление размерами в приложении winform в VB.NET 2015 год


Привет!

Добрый день всем,

Я работаю в приложении windows form в vb.net использование visual studio 2015.
Мне нужно сделать автоматические размеры всех элементов управления, размещенных на форме, таких как метки, текстовые поля, поля со списком, DataGridViews и т. д.

Например, когда размеры формы увеличиваются или уменьшаются, то размер элементов управления также должен увеличиваться или уменьшаться вместе с размерами шрифта соответственно.
Кроме того, если приложение работает в системе с высоким разрешением и большим экраном дисплея, то форма будет настроена автоматически, поскольку свойство Windowstate for установлено как развернутое. В этом случае я хочу, чтобы размеры элементов управления и их размеры шрифта также были соответственно увеличены, и наоборот.

Надеюсь, я успешно объяснил, что мне нужно на самом деле.
Если кто-то может направлять меня, я буду благодарен за этот ac рода.

Спасибо!

С уважением:
Мухаммад Асим Могол

Что я уже пробовал:

Для этой цели я использовал Панель управления Table Layout Panel, а также свойство Anchor &doc элементов управления. Таким образом, размеры элементов управления увеличиваются и уменьшаются, но размеры шрифта остаются прежними, поэтому разрешение формы выглядит несбалансированным.

1 Ответов

Рейтинг:
0

Ralf Meier

Есть 3 способа сделать это :
1-й : вы настраиваете каждый из ваших элементов управления, чтобы он мог соответствовать размеру шрифта в измерении элементов управления
2-й : вы настраиваете свой контейнер-элемент управления, чтобы сделать то же самое с элементами управления, принадлежащими ему
3-й : вы добавляете метод в свою форму (которая также является контейнером), чтобы сделать это с помощью принадлежащих ей элементов управления.

Теперь вы должны решить, хотите ли вы иметь максимальный размер шрифта для каждого из этих элементов управления (один элемент управления имеет размер шрифта=16, а другой-12 и так далее) ... Или ... если вы хотите иметь максимальный размер шрифта, который является общим для элементов управления (один элемент управления имеет размер шрифта=16, а другой - 12-поэтому вы устанавливаете каждый из них на 12).

Способ реализовать это :
- итерация к элементам управления-коллекция вашего контейнера
- получить размер каждого элемента управления и его текстовое содержимое, а также рассчитать максимально возможный размер шрифта этого элемента управления и запомнить его (в зависимости от вашего решения)
- ::
- итерация к элементам управления-коллекция вашего контейнера
- установите размер каждого элемента управления на новый (вычисленный) размер шрифта

Вот метод получения максимального совпадающего размера шрифта для заданного размера элемента управления в зависимости от его текстового содержимого, выбранного шрифта и стиля :

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, myFont.Unit)
        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, workFont.Unit)
                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, workFont.Unit)
                myTextSize = TextRenderer.MeasureText(myText, workFont)
            Loop Until (myTextSize.Width <= mySize.Width) AndAlso (myTextSize.Height <= mySize.Height)

        End If

        Return currentSize

    End Function