我的表格位于桌面窗口右下角的任务栏/系统托盘上方。这有点像弹出通知。通知本身看起来很棒,但是它上面有一个按钮可以调整表格的大小,以5px的增量设置大小,同时保持相对于屏幕右下角的位置。
这个问题是看起来不太顺利。调整 Me.Width 从左侧调整大小,然后您必须使用 Me.Left 向左移动表单以进行补偿。 Me.SetBounds似乎只是设置这些属性的包装器。
我能做些什么让表格顺利(或至少看起来)从表格的左边向外调整大小?
答案 0 :(得分:4)
ETA :您实际上可以使用SetBounds
执行此操作,因为SetBounds
会委托给SetBoundsCore
,SetWindowPos
会调用SetBounds
。所以Private button1 As Button
Private components As IContainer = Nothing
Private tm As Timer = New Timer
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs)
MyBase.Left = (Screen.PrimaryScreen.WorkingArea.Width - MyBase.Width)
MyBase.Top = (Screen.PrimaryScreen.WorkingArea.Height - MyBase.Height)
Me.tm.Enabled = False
Me.tm.Interval = 20
AddHandler Me.tm.Tick, Function
If (MyBase.Width < 500) Then
Form1.MoveWindow(MyBase.Handle, (MyBase.Left - 5), (MyBase.Top - 5), (MyBase.Width + 5), (MyBase.Height + 5), True)
Else
Me.tm.Enabled = False
End If
End Function
End Sub
<DllImport("user32.dll", SetLastError:=True)> _
Friend Shared Function MoveWindow(ByVal hWnd As IntPtr, ByVal X As Integer, ByVal Y As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal bRepaint As Boolean) As Boolean
End Function
将在内部真正设置所有边界,窗口管理器将在设置所有属性后仅重新绘制窗口。
另一种选择是导入MoveWindow
function并使用它。它在这里产生一个平滑的动画,因为它可以在告诉窗口管理器重绘窗口之前同时设置的大小和位置。
我的测试代码看起来像这样(在Reflector的帮助下从C#通过IL转换为VB):
{{1}}
答案 1 :(得分:0)
我从未尝试过这个,但你尝试过将表单的DoubleBuffer属性设置为True吗?这应该使绘图平滑。
答案 2 :(得分:0)
您可能会尝试将像素步长减少到1-2也是如此,5px调整大小似乎很多,我可以看到这可能会出现波动。