暂停更新以控制Text属性

时间:2015-02-20 16:51:26

标签: c# winforms

我正在廉价的触摸屏PC上运行QWERTY风格的键盘(类似于银行ATM)。 Panel容器有几十个按钮,当用户按下“Shift”时,我会交换按钮上的所有文本。例如,btnPos12.Text =(m_bShiftOn)? “Q”:“q”;在面板上所有按钮的大循环中。

这样可以正常工作,但由于处理器功能不是很强大,因此所有按钮文本都会发生变化,因此会出现明显的闪烁现象。我想暂停所有文本更新,直到它们全部完成然后......砰!...改变它们(也就是双缓冲)。我尝试使用这个帖子: How do I suspend painting for a control and its children?

这适用于单个控件,例如多行TextBox,但不会阻止每个按钮的文本更新。

然后我尝试在一个按钮上更改文本。首先,我暂停了该按钮上的绘图,然后在一个大循环中更改了文本...但每次调用btnPosXX.Text = ...时文本都会更改。有没有办法阻止更改控件的“Text”属性?

int nShiftIndex = (m_bShiftOn) ? UPPER : LOWER;
for (int nButton = 0; nButton < pnlButtons.Controls.Count; nButton++)
{
    pnlButtons.Controls[nButton].Text = m_aszKeys[nShiftIndex];
} 

1 个答案:

答案 0 :(得分:0)

this.SuspendLayout();

  ...

this.ResumeLayout();