DrawToBitmap: временно масштабировать элемент управления
Я использую DrawToBitmap для создания моментального магазина элемента управления WinForms, и я даю пользователю возможность создавать это изображение в разных размерах. Мой код для изменения размера элемента управления
Private Function GetChartScaledImage(NewSize As Size) As Bitmap
Dim bmp As New Bitmap(NewSize.Width, NewSize.Height) 'Create output bitmap
With workingChart
Dim oldsize As Size = .Size 'Save chart's old size
Dim lastdock As DockStyle = .Dock 'Save chart's old docking style
.SuspendLayout()
.Dock = DockStyle.None 'Disable dock to allow resize
.Size = NewSize 'Set the temporary size
.DrawToBitmap(bmp, New Rectangle(0, 0, NewSize.Width, NewSize.Height)) 'Draw the image
.Dock = lastdock 'Recreate the old behaviour
.Size = oldsize 'Recreate the old size
.ResumeLayout()
End With
Return bmp
End Function
В основном это работает нормально, но есть проблема в том, что размер элемента управления может быть переопределен его родительским контейнером. Я использую TableLayoutPanels, которые могут помешать правильному масштабированию элемента управления.
Еще одна проблема, с которой я еще не сталкивался, но, вероятно, может случиться, заключается в том, что порядок стыковки формы можно изменить путем временного сброса .Dock
имущество.
Есть ли другой способ масштабирования элемента управления для одного события рисования?
Я мог бы масштабировать растровое изображение впоследствии, но это делает изображение размытым. Это также не вариант создания временного нового элемента управления с теми же свойствами, поскольку элемент управления довольно сложен.