Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
6 / 5 / 1
Регистрация: 02.05.2015
Сообщений: 177
1

Resize формы. Как ограничить размер изменения формы

02.05.2018, 16:48. Показов 1282. Ответов 1
Метки нет (Все метки)

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

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
Public Class main
 
    Dim rs As New Resizer
 
Private Sub main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        rs.FindAllControls(Me)
    End Sub
 
Private Sub main_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
        rs.ResizeAllControls(Me)
    End Sub
 
End Class
 
Public Class Resizer
    '----------------------------------------------------------
    ' ControlInfo
    ' Structure of original state of all processed controls
    '----------------------------------------------------------
    Private Structure ControlInfo
        Public name As String
        Public parentName As String
        Public leftOffsetPercent As Double
        Public topOffsetPercent As Double
        Public heightPercent As Double
        Public originalHeight As Integer
        Public originalWidth As Integer
        Public widthPercent As Double
        Public originalFontSize As Single
    End Structure
 
    '-------------------------------------------------------------------------
    ' ctrlDict
    ' Dictionary of (control name, control info) for all processed controls
    '-------------------------------------------------------------------------
    Private ctrlDict As Dictionary(Of String, ControlInfo) = New Dictionary(Of String, ControlInfo)
 
    '----------------------------------------------------------------------------------------
    ' FindAllControls
    ' Recursive function to process all controls contained in the initially passed
    ' control container and store it in the Control dictionary
    '----------------------------------------------------------------------------------------
    Public Sub FindAllControls(ByVal thisCtrl As Control)
 
        '-- If the current control has a parent, store all original relative position
        '-- and size information in the dictionary.
        '-- Recursively call FindAllControls for each control contained in the
        '-- current Control
        For Each ctl As Control In thisCtrl.Controls
            Try
                If Not IsNothing(ctl.Parent) Then
                    Dim parentHeight = ctl.Parent.Height
                    Dim parentWidth = ctl.Parent.Width
 
                    Dim c As New ControlInfo
                    c.name = ctl.Name
                    c.parentName = ctl.Parent.Name
                    c.topOffsetPercent = Convert.ToDouble(ctl.Top) / Convert.ToDouble(parentHeight)
                    c.leftOffsetPercent = Convert.ToDouble(ctl.Left) / Convert.ToDouble(parentWidth)
                    c.heightPercent = Convert.ToDouble(ctl.Height) / Convert.ToDouble(parentHeight)
                    c.widthPercent = Convert.ToDouble(ctl.Width) / Convert.ToDouble(parentWidth)
                    c.originalFontSize = ctl.Font.Size
                    c.originalHeight = ctl.Height
                    c.originalWidth = ctl.Width
                    ctrlDict.Add(c.name, c)
                End If
 
            Catch ex As Exception
                Debug.Print(ex.Message)
            End Try
 
            If ctl.Controls.Count > 0 Then
                FindAllControls(ctl)
            End If
 
        Next '-- For Each
 
    End Sub
 
    '----------------------------------------------------------------------------------------
    ' ResizeAllControls
    ' Recursive function to resize and reposition all controls contained in the Control
    ' dictionary
    '----------------------------------------------------------------------------------------
    Public Sub ResizeAllControls(ByVal thisCtrl As Control)
 
        Dim fontRatioW As Single
        Dim fontRatioH As Single
        Dim fontRatio As Single
        Dim f As Font
 
        '-- Resize and reposition all controls in the passed control
        For Each ctl As Control In thisCtrl.Controls
            Try
                If Not IsNothing(ctl.Parent) Then
                    Dim parentHeight = ctl.Parent.Height
                    Dim parentWidth = ctl.Parent.Width
 
                    Dim c As New ControlInfo
 
                    Dim ret As Boolean = False
                    Try
                        '-- Get the current control's info from the control info dictionary
                        ret = ctrlDict.TryGetValue(ctl.Name, c)
 
                        '-- If found, adjust the current control based on control relative
                        '-- size and position information stored in the dictionary
                        If (ret) Then
                            '-- Size
                            ctl.Width = Int(parentWidth * c.widthPercent)
                            ctl.Height = Int(parentHeight * c.heightPercent)
 
                            '-- Position
                            ctl.Top = Int(parentHeight * c.topOffsetPercent)
                            ctl.Left = Int(parentWidth * c.leftOffsetPercent)
 
                            '-- Font
                            f = ctl.Font
                            fontRatioW = ctl.Width / c.originalWidth
                            fontRatioH = ctl.Height / c.originalHeight
                            fontRatio = (fontRatioW + fontRatioH) / 2 '-- average change in control Height and Width
                            ctl.Font = New Font(f.FontFamily, c.originalFontSize * fontRatio, f.Style)
 
                        End If
                    Catch
                    End Try
                End If
            Catch ex As Exception
            End Try
 
            '-- Recursive call for controls contained in the current control
            If ctl.Controls.Count > 0 Then
                ResizeAllControls(ctl)
            End If
 
        Next '-- For Each
    End Sub
 
End Class
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.05.2018, 16:48
Ответы с готовыми решениями:

Как увеличить размер формы?
У формы фоном стоит рисунок, на ней в определенных местах стоят контролы(относительно рисунка), как...

Как установить минимальный размер формы
И так как же установить минимальный размер формы допустим в 100x100 points если размер формы равен...

Как добавить возможность изменения размера формы без бордюра
Как добавить возможность изменения размера формы пользователем, когда FormBorderStyle = None?

Как реализовать подгон картинки под размер формы
ребят, подскажите как реализовать подгон картинки под размер формы?

1
Модератор
Эксперт .NET
3370 / 3029 / 464
Регистрация: 27.01.2014
Сообщений: 5,625
02.05.2018, 17:12 2
Лучший ответ Сообщение было отмечено NikolayUh как решение

Решение

у формы есть свойств Size Min и Max... вот их и настройте под ваш вопрос.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.05.2018, 17:12

Как обращаться к компонентам формы в классе, не прописывая везде имя формы
Добрый вечер. Имеем одну форму (Class Form2), ну или две как у меня, было принято решение раскидать...

Оптимальный размер формы
Всем привет! Кто-то изучал этот вопрос? Какой размер формы наиболее оптимальный? Например,...

Изменения дизайна формы в конструкторе не вступают в силу
У меня есть готовая программа. Но только на первой же форме написано не моё имя. Я в настройках...

Размер формы от страницы в WebBrowser
Мне нужно что бы при загрузки страницы вычислялся её размер и форма этот размер принимала. В...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru