2011-01-10 173 views
4

我在論壇上搜索,我嘗試了幾件事......但他們似乎並沒有工作。讓我解決我的問題。根據屏幕分辨率更改屏幕分辨率(不改變顯示器分辨率並使用最大化屏幕選項)

我的筆記本電腦屏幕分辨率非常高:1400x1050。我正在設計我的應用程序。

我的同事在他的筆記本電腦(分辨率較低)上嘗試過,而且該應用程序不適合他的筆記本電腦。按鈕拖出屏幕空間。

所以,我希望我的應用程序根據屏幕分辨率自動調整大小/調整。 我發現了一些類似的論壇,我嘗試了一些開發人員提出的建議,但那並不適合我。

我試過了: Solution 1:但正在改變用戶的屏幕取代調整表單。

我不想使用Maximized屏幕選項,也不想更改用戶的電腦設置。 不幸的是我沒有使用表格佈局面板。

請給我一個簡單的解決方案。

+0

您可以添加表格的截圖。我要看看你能不能伸展任何控件。有些選項可以根據字體大小等來縮放表單,但這取決於你想要的最終效果。 – ja72 2011-01-10 04:36:23

+0

我不能在這裏放置屏幕截圖。但是可以打開一些表單詳細信息:表單大小:1130,863,開始位置:CenterScreen和Window State:Normal(包含近80個UI組件)。 – Preeti 2011-01-10 04:51:24

+0

您是否已將`AutoScaleMode`屬性設置爲`Dpi`? http://msdn.microsoft.com/en-us/library/system.windows.forms.autoscalemode.aspx – 2011-01-17 18:59:34

回答

1

您可以使用下面的代碼來獲取主屏幕的高度和寬度:鑑於這一點,你應該進行檢查

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

如果您無法或不願意縮小某些控件,您可能或願意使用某種可以在用戶意願下固定/顯示/隱藏的面板。這會給你更多的靈活性。

Have a look at these.

1

簡單的解決方案?

以最低預期分辨率(E.G. 800x600)設計您的應用程序,以便可以放大應用程序。

2

我知道這很愚蠢,但是......你是否試圖設置控制「錨」

它們可以讓你的控制,當你調整你的形式,也許可以幫你調整,也考慮使用滾動條

2

OK,這只是因爲它得到一樣簡單。只需遍歷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 

請注意,我正在使用反射來查看每個控件是否具有我們需要調整的屬性。我這樣做的方式很乾淨,但使用「後期綁定」,並要求選項嚴格關閉。經過測試和批准。

0

vb.net 2013在這個網站上發現了一些這樣的代碼,現在找不到它來給予功勞!:-(在17.5x760的15.5筆記本電腦上製作,改變用戶主屏幕的工作區域。形式新的大小,太多,如果它擊中了原來的某個資源的字體。試試吧,用它玩。

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