简体   繁体   English

如何使控件在运行时由[.NET Winforms]调整大小?

[英]How to make a control resizable by the user at runtime [.NET Winforms]?

It is in Winforms. 它在Winforms中。

I have a UserControl that is anchored TOP, BOTTOM and LEFT. 我有一个锚定在顶部,底部和左侧的UserControl。 I would like to allow the user to drag its right border somehow and resize it horizontally. 我想允许用户以某种方式拖动其右边框并水平调整其大小。

The control is placed right into the form, no panel or groupbox to place a "Splitter". 控件直接放置在窗体中,没有面板或组框放置“分隔符”。

Any idea how to make a control resizable at runtime by the user? 知道如何让用户在运行时调整控件的大小吗?

Private Declare Function GetWindowLongA Lib "User32" (ByVal hWnd As Integer, ByVal nIndex As Integer) As Long
Private Declare Function SetWindowLongA Lib "User32" (ByVal hWnd As Integer, ByVal nIndex As Integer, ByVal dwNewLong As Long) As Long
Private Declare Sub SetWindowPos Lib "User32" (ByVal hWnd As Integer, ByVal hWndInsertAfter As Integer, ByVal X As Integer, ByVal Y As Integer, ByVal CX As Integer, ByVal CY As Integer, ByVal wFlags As Integer)
Const SWP_NOSIZE = &H1
Const SWP_NOZORDER = &H4
Const SWP_NOMOVE = &H2
Const SWP_DRAWFRAME = &H20
Const GWL_STYLE = (-16)
Const WS_THICKFRAME = &H40000

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    ResizeControl(TextBox1, Me)
End Sub

Sub ResizeControl(ByVal ControlName As Control, ByVal FormName As Form)
    Dim NewStyle As Long
    NewStyle = GetWindowLongA(ControlName.Handle, GWL_STYLE)
    NewStyle = NewStyle Or WS_THICKFRAME
    NewStyle = SetWindowLongA(ControlName.Handle, GWL_STYLE, NewStyle)
    SetWindowPos(ControlName.Handle, FormName.Handle, 0, 0, 0, 0, SWP_NOZORDER Or SWP_NOSIZE Or SWP_NOMOVE Or SWP_DRAWFRAME)
End Sub

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM