如何检查 RichTextBox c# 中是否存在垂直 ScrollBar?

Muh*_*wan 2 c# richtextbox winforms

我正在将文本附加到 RichTextBox。当文本超出 RichTextBox 的可见区域时,会自动出现垂直滚动条。

我想检查是否不存在滚动条,而不是将 Padding 设置为 5。如果出现滚动条,则 padding 应为 0

private void frmAno_Load(object sender, EventArgs e)
    {
        DisplayingAnomalies();
        ChangeFormSize();
    }
private void DisplayingAnomalies()
    {
        int length;
        string heading;
        switch (_lstNullSheet.Count == 0 ? "zero" :
               _lstNullSheet.Count == 1 ? "one" :
               _lstNullSheet.Count > 1 ? "more" : "floor")
        {
            case "zero":
                break;
            case "one":
                heading = "Empty Sheet";
                rtbDisplay.Text = String.Format("{0}\r\n[", heading);
                rtbDisplay.AppendText(_lstNullSheet[0] + "] Sheet in Excel has no data.\r\n\n");
                break;
            case "more":
                heading = "Empty Sheets";
                rtbDisplay.Text = String.Format("{0}\r\n",heading);
               
                foreach(var item in _lstNullSheet)
                {
                    rtbDisplay.AppendText("["+item);
                    length = rtbDisplay.Text.Length;
                    if(_lstNullSheet.Last().Equals(item))
                    {
                        rtbDisplay.AppendText("] Sheets in Excel has no data.afsdfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\r\n\n");
                        break;
                    }
                    rtbDisplay.AppendText("], ");
                    }
                break;
            case "floor":
                break;
            default:
                break;
        }
        _sizeToChange = true;
    }
private void ChangeFormSize()
    {
        if(_sizeToChange)
        {
           this.Height = 200;
        }
//Here i want to check if scrollbar is present in richtextbox or not 
       if(rtbDisplay.Width - rtbDisplay.ClientSize.Width >= 
        SystemInformation.VerticalScrollBarWidth)
        {
        }
    }
Run Code Online (Sandbox Code Playgroud)

我已经添加了将文本附加到 Richtextbox 的代码。然后我将 Richtextbox 宽度与滚动条宽度进行比较。

Aou*_*hid 7

(从 MSDN 论坛得到的)

其实很简单。您必须检查WS_VSCROLL控件的窗口样式中的样式位。

[System.Runtime.InteropServices.DllImport("user32.dll")]
private extern static int GetWindowLong(IntPtr hWnd, int index);

public static bool VerticalScrollBarVisible(Control ctl) {
  int style = GetWindowLong(ctl.Handle, -16);
  return (style & 0x200000) != 0;
}
Run Code Online (Sandbox Code Playgroud)

现在,按如下方式调用该函数:

var IsScrollBarVisible = VerticalScrollBarVisible(myRichTextBox);
/// Put your logic here
Run Code Online (Sandbox Code Playgroud)

编辑1

RichTextBox另一种方法可能是这样的:获取附加文本之前和附加文本之后的大小,只需比较ClientSize文本框的值,就可以根据宽度确定滚动条是否可见。

编辑2

(此编辑的灵感来自于您将在下面看到的评论)

将检查放在文本框的事件WS_SCROLL内,但是将其包装在条件内,如下所示:ClientSizeChangedif

private void textbox_ClientSizeChanged(...)
{

 if (VerticalScrollBarVisible(myRichTextbox)
 { 

  //Put your logic here, what you want to do if scrollbar is visible
 }
}
Run Code Online (Sandbox Code Playgroud)