.net 需要设置RichTextBox ZoomFactor两次吗?
我注意到调用.net 需要设置RichTextBox ZoomFactor两次吗?,.net,winforms,richtextbox,.net,Winforms,Richtextbox,我注意到调用Clear()时,我的RichTextBox控件的ZoomFactor被重置为1.0 我第一次尝试保存和还原ZoomFactor失败。我必须将其设置为1.0,然后再设置一次以获得效果 private void ClearOutputWindow() { RichTextBox rtb = textBox2; // save zoomfactor to restore it later var zSave = rtb.Zoom
Clear()
时,我的RichTextBox
控件的ZoomFactor
被重置为1.0
我第一次尝试保存和还原ZoomFactor
失败。我必须将其设置为1.0
,然后再设置一次以获得效果
private void ClearOutputWindow()
{
RichTextBox rtb = textBox2;
// save zoomfactor to restore it later
var zSave = rtb.ZoomFactor;
rtb.Clear();
// we have to set it to 1.0 first
// and then to the desired value
// otherwise it won't work ...
rtb.ZoomFactor = 1.0f;
rtb.ZoomFactor = zSave;
}
在
.NET Framework 4.7.2
下,这种行为背后有什么原因吗?是的,RichTextBox包装类不知道Clear()也会重置缩放因子。当本机控件看不到值的更改时,它可以避免更新本机控件,因此重新赋值没有效果。您找到的解决方法是正确的。错误在Setter中。您可以看到Getter sendEM\u GETZOOM
,然后计算缩放因子。Setter只依赖于内部字段的当前值。这是不正确的,因为控件的文本是通过P/InvokingSetWindowText()
在控件类中更改的,而该控件类对缩放一无所知。因此,缩放值可以并且将在其他地方更改。Setter应该从RichEdit控件获取实时缩放因子。