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 имущество.

Есть ли другой способ масштабирования элемента управления для одного события рисования?

Я мог бы масштабировать растровое изображение впоследствии, но это делает изображение размытым. Это также не вариант создания временного нового элемента управления с теми же свойствами, поскольку элемент управления довольно сложен.

0 ответов

Другие вопросы по тегам