Могу ли я масштабировать форму, пока она активна - PullRequest
0 голосов
/ 20 марта 2012

ну, ребята, я хочу знать, есть ли способ увеличить мою форму в vb.net. Я мог бы изменить размер формы и привязав все элементы управления к левому верхнему правому нижнему углу, я могу сделать его похожим на зум. но это на самом деле не масштабирование. это изменение размера. размер шрифта и другие форматы остаются неизменными.

также посмотрим, сможет ли кто-нибудь ответить на мой другой вопрос ..

https://stackoverflow.com/questions/9749877/need-help-doesnt-printform-work-well-on-painted-objects-or-forms

1 Ответ

0 голосов
/ 20 марта 2012

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

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

Public Class Form1
Private lblSize As Single
Private Fwid As Integer
Private Fheight As Integer

Private Sub Form1_Resize(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Resize
    Me.Height = Fheight * Me.Width / Fwid 
    For Each ctl In Me.Controls
        If TypeOf ctl Is Label Then
            Dim lbl As Label = DirectCast(ctl, Label)
            Dim nFont As New Font(FontFamily.GenericSansSerif, lblSize * Me.Width / Fwid, FontStyle.Regular, GraphicsUnit.Point)
            lbl.Font = nFont
        End If
        Next
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Fwid = Me.Width
        Fheight = Me.Height
        lblSize = Label1.Font.Size
    End Sub
End Class

Это необходимо сделать для каждого типа управления, который вы используете. Я только сделал размер шрифта здесь, но вы должны были бы масштабировать позицию и т.д., а также. Перерисовать это не будет красиво, но это будет работать. Лучшей альтернативой может быть использование WPF, в котором доступно больше инструментов для подобных вещей.

Кроме того, если у вас есть элементы управления внутри элементов управления (вкладки, групповые блоки и т. Д.), Вы должны использовать рекурсию, чтобы найти их все - что-то вроде:

Public Shared Function GetAllControlsRecurs(ByVal list As List(Of Control), ByVal parent As Control, ByVal ctrlType As System.Type) As List(Of Control)
   If Parent Is Nothing Then Return list
   If Parent.GetType Is ctrlType Then
            list.Add(Parent)
   End If
   For Each child As Control In Parent.Controls
       GetAllControlsRecurs(list, child, ctrlType)
   Next
   Return list
End Function

где вы бы использовали вышеуказанную функцию, например:

Dim buttonList As New List(Of Control)
Dim checkboxList As New List(Of Control)
'etc...

For Each ctl As Button In GetAllControlsRecurs(buttonList, Me, GetType(Button))
     ' Do something...
Next

For Each ctl As CheckBox In GetAllControlsRecurs(checkboxList, Me, GetType(CheckBox))
     ' Do Something...
Next

Также - принятие ответов, вероятно, побудит людей помочь вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...