Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 需要设置RichTextBox ZoomFactor两次吗?_.net_Winforms_Richtextbox - Fatal编程技术网

.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 send
EM\u GETZOOM
,然后计算缩放因子。Setter只依赖于内部字段的当前值。这是不正确的,因为控件的文本是通过P/Invoking
SetWindowText()
在控件类中更改的,而该控件类对缩放一无所知。因此,缩放值可以并且将在其他地方更改。Setter应该从RichEdit控件获取实时缩放因子。