我正在尝试从表单的左边缘显示一个菜单。当我这样做时,我希望表单顶部的面板缩小。面板上有按钮,锚点设置为'右边。
面板调整大小,向左移动并减小相同的宽度 - 因此按钮应保持在屏幕上的相同位置。按钮确实保持在正确的位置,但看起来很糟糕。即使我使用.Bounds = new Rectangle(...)设置面板的新尺寸,它看起来好像我设置了Left属性,然后设置了Width,带有时间延迟!我搞乱了SuspendLayout并没有任何影响。我确信这有一个简单的方法。我创建的一个简单的例子:
private void StartTest_Click( object sender, EventArgs e )
{
_AmountLeft = PanelToResize.Width / 2; // half of it
_Step = _AmountLeft / 10;
Ticker.Enabled = true;
}
private void Ticker_Tick( object sender, EventArgs e )
{
int this_bit = Math.Min( _AmountLeft, _Step );
// reduce
PanelToResize.Bounds = new Rectangle( PanelToResize.Left + this_bit, PanelToResize.Top, PanelToResize.Width - this_bit, PanelToResize.Height );
if (this_bit == _AmountLeft)
Ticker.Enabled = false;
_AmountLeft -= this_bit;
}
我已将此代码和设计器代码放在此处:https://gist.github.com/anonymous/acf0ec4d5c81dbc5a670
答案 0 :(得分:3)
在表单中尝试以下代码以减少闪烁。
protected override CreateParams CreateParams
{
get
{
const int WS_EX_COMPOSITED = 0x02000000;
var cp = base.CreateParams;
cp.ExStyle |= WS_EX_COMPOSITED;
return cp;
}
}
它的双缓冲整个窗口表面,包括子控件
请参阅here了解值,包括WS_EX_COMPOSITED