2012-03-20 3 views
0

よく知りたいのは、vb.netでフォームをズームする方法はありますか? フォームのサイズを変更し、すべてのコントロールを左上右下に移動するとズームのように見えるようにすることができます。実際にズーミングしているわけではありません。サイズ変更中です。フォントサイズやその他のフォーマットは同じです。誰もが私の他の質問に答えることができるかどうアクティブな状態でフォームをズームすることはできますか?

も..

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

答えて

0

を参照してくださいいいえ、私の知る限りでは、このようにズームする簡単な方法はありません。特にフォントは固定されているため、フォームを任意にサイズ変更すると、通常のフォントよりも背の高さや幅が大きくなることはありません。

ただし、その縦横比を維持するためにサイズ変更を強制することができ、その後、あなたは再帰的にあなたのすべてのコントロールを通過することができ、自分のタイプを識別し、フォームの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 

また、回答を受け入れると、おそらく人々があなたを助けてくれるでしょう。

関連する問題