Редактировать: принять TextBox в качестве элемента управления для примера - где высота не является проблемой
Поэтому я использую мышь, чтобы изменить ширину и расположение элемента управления во время выполнения (через захват ручки с помощью мыши, почти так же, как вы можете изменить его во время разработки).Тем не менее, я заметил некоторые проблемы с изменением размера, которые, я думал, можно было бы исправить, вызвав
<panel>.SuspendLayout
<control>.location = new Point(x, y)
<control>.width = newWidth
<panel>.ResumeLayout
Теперь и местоположение, и ширина меняются правильно, но поскольку местоположение меняется первым - вы видите размытие текстового поля, изменяющегосяШирина после этого движется.Теперь, читая через Suspend и ResumeLayout, я предполагаю, что они должны быть вызваны до создания элементов управления.В таком случае: как мне убедиться, что местоположение и ширина меняются сразу, чтобы избежать размытия?
Редактировать: Решено - Следующий код позволил мне приостановить рисование элемента управления до того, как свойства были заданы, затемвозобновить после.В отличие от приостановки макета *
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Integer, _
ByVal wMsg As Integer, _
ByVal wParam As Integer,
ByVal lParam As Integer) As Integer
Private Const WM_SETREDRAW As Integer = 11
' Extension methods for Control
<Extension()>
Public Sub ResumeDrawing(ByVal Target As Control, ByVal Redraw As Boolean)
SendMessage(Target.Handle, WM_SETREDRAW, 1, 0)
If Redraw Then
Target.Refresh()
End If
End Sub
<Extension()>
Public Sub SuspendDrawing(ByVal Target As Control)
SendMessage(Target.Handle, WM_SETREDRAW, 0, 0)
End Sub
<Extension()>
Public Sub ResumeDrawing(ByVal Target As Control)
ResumeDrawing(Target, True)
End Sub