Изменение разрешения формы в зависимости от разрешения экрана (без изменения разрешения монитора и использования параметра «Развернутый экран») - PullRequest
4 голосов
/ 10 января 2011

Я искал на форумах, и я попробовал несколько вещей ... но, похоже, они действительно не работали. Позвольте мне изложить мою проблему.

У меня на ноутбуке очень высокое разрешение экрана: 1400x1050. Я создаю свое приложение на этом.

Мой коллега опробовал его на своем ноутбуке (который имел меньшее разрешение), и приложение не помещалось на его ноутбуке. Кнопки тянулись за пределы экрана.

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

Я пытался: Решение 1 : Но вместо того, чтобы настраивать форму, меняется разрешение экрана пользователя.

Я не хочу использовать параметр «Развернутый экран» и не хочу изменять настройки компьютера пользователя. К сожалению, я не использую панель Table Layout.

Пожалуйста, предложите мне простое решение.

Ответы [ 6 ]

3 голосов
/ 20 января 2011

Я знаю, что это глупо, но ... вы пытались установить контроль "якоря" ?

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

2 голосов
/ 21 января 2011

ОК, это почти так же просто, как и получается.Просто переберите элементы управления VB и настройте их размеры в зависимости от соотношения нового разрешения экрана и вашего проектного разрешения экрана.то есть что-то вроде:

    Dim DesignScreenWidth As Integer = 1600
    Dim DesignScreenHeight As Integer = 1200
    Dim CurrentScreenWidth As Integer = Screen.PrimaryScreen.Bounds.Width
    Dim CurrentScreenHeight As Integer = Screen.PrimaryScreen.Bounds.Height
    Dim RatioX as Double = CurrentScreenWidth / DesignScreenWidth
    Dim RatioY as Double = CurrentScreenHeight / DesignScreenHeight
    For Each iControl In Me.Controls
        With iControl
            If (.GetType.GetProperty("Width").CanRead) Then .Width = CInt(.Width * RatioX)
            If (.GetType.GetProperty("Height").CanRead) Then .Height = CInt(.Height * RatioY)
            If (.GetType.GetProperty("Top").CanRead) Then .Top = CInt(.Top * RatioX)
            If (.GetType.GetProperty("Left").CanRead) Then .Left = CInt(.Left * RatioY)
        End With
    Next

Обратите внимание, что я использую отражение, чтобы увидеть, есть ли у каждого элемента управления свойства, которые нам нужно настроить.То, как я это делаю, чисто, но использует «позднее связывание» и требует Option Strict Off.Протестировано и одобрено.

1 голос
/ 17 января 2011

Простое решение?

Создайте приложение с самым низким ожидаемым разрешением (например, 800x600), чтобы его можно было масштабировать в сторону увеличения.

1 голос
/ 10 января 2011

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

Dim intX As Integer = Screen.PrimaryScreen.Bounds.Width
Dim intY As Integer = Screen.PrimaryScreen.Bounds.Height

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

// This is pseudocode, as I usually do C#:
MyForm.Width = Min(ScreenWidth, MyForm.Width)
MyForm.Height = Min(ScreenHeight, MyForm.Height)

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

0 голосов
/ 15 мая 2015

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

Option Strict On
Option Explicit On
Public Class Form1
    ' For screen size changes. 
    Dim cw As Integer ' Forms current Width.
    Dim ch As Integer ' Forms current Height.
    Dim iw As Integer = 1280 ' Forms initial width.
    Dim ih As Integer = 760 ' Forms initial height.
    ' Retrieve the working rectangle from the Screen class using the        PrimaryScreen and the WorkingArea properties.  
    Dim workingRectangle As System.Drawing.Rectangle =     Screen.PrimaryScreen.WorkingArea

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    ' Set the size of the form slightly less than size of working rectangle. 
    Me.Size = New System.Drawing.Size(workingRectangle.Width - 5, workingRectangle.Height - 5)
    ' Set the location so the entire form is visible. 
    Me.Location = New System.Drawing.Point(3, 3)
End Sub

Private Sub Main_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
    ' Change controls size and fonts to fit screen working area..
    Dim rw As Double = (Me.Width - cw) / cw ' Ratio change of original form width.
    Dim rh As Double = (Me.Height - ch) / ch ' Ratio change of original form height.
    ' Change controls size to fit users screen working area.
    For Each Ctrl As Control In Controls
        Ctrl.Width += CInt(Ctrl.Width * rw)
        Ctrl.Height += CInt(Ctrl.Height * rh)
        Ctrl.Left += CInt(Ctrl.Left * rw)
        Ctrl.Top += CInt(Ctrl.Top * rh)
    Next
    cw = Me.Width
    ch = Me.Height
    ' Change all the forms controls font size.
    Dim nfsize As Single
    If cw > iw + 500 Then
        For Each Ctrl As Control In Controls
            ' Get the forms controls font size's property and increase it. Reset the font to the new size. 
            nfsize = Me.Font.Size + 3
            Ctrl.Font = New Font(Ctrl.Font.Name, nfsize, FontStyle.Bold, Ctrl.Font.Unit)
        Next
    Else
        Exit Sub
    End If
End Sub
0 голосов
/ 17 января 2011

Если вы не можете или не хотите уменьшить некоторые элементы управления, вы можете или захотите использовать какие-то панели, которые можно закрепить / показать / скрыть по желанию пользователя. Это даст вам больше гибкости.

Посмотрите на них.

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