为什么StatusStrip的SizingGrip没有显示

本文关键字:显示 SizingGrip StatusStrip 为什么 | 更新日期: 2023-09-27 18:25:44

我想在UserControl中添加一个StatusStrip,并在运行时调整该UserControl的大小。以下是我添加StatusStrip的方法。

  StatusStrip sb = new StatusStrip();
  sb.BackColor = System.Drawing.SystemColors.ControlDark;
  sb.Dock = DockStyle.Bottom;
  sb.GripMargin = new Padding(2);      
  sb.SizingGrip = true;
  sb.GripStyle = ToolStripGripStyle.Visible;
  sb.LayoutStyle = ToolStripLayoutStyle.HorizontalStackWithOverflow;
  this.Controls.Add(sb);

StatusStrip显示在UserControl的底部。但是在StatusStrip的右下角没有SizingGrip(小三角形)。为什么不呢?

为什么StatusStrip的SizingGrip没有显示

它没有显示,因为UserControl在运行时不是一个相当大的控件。StatusStrip,更具体地说是尺寸手柄,是为支持Form控制而设计的。

以下是ShowSizingGrip的代码,这是在绘制过程中使用的private属性:

private bool ShowSizingGrip
{
    get
    {
        if (this.SizingGrip && base.IsHandleCreated)
        {
            if (base.DesignMode)
            {
                return true;
            }
            HandleRef rootHWnd = WindowsFormsUtils.GetRootHWnd(this);
            if (rootHWnd.Handle != IntPtr.Zero)
            {
                return !UnsafeNativeMethods.IsZoomed(rootHWnd);
            }
        }
        return false;
    }
}

在这一点上,我可以看到两个兴趣点。首先,HandleRef rootHWnd = WindowsFormsUtils.GetRootHWnd(this);,我不能测试这个类,因为它是internal,但它很有可能不会返回窗口。然而,即使是这样,如果所述窗口当前最大化,!UnsafeNativeMethods.IsZoomed(rootHWnd);,则尺寸夹点也不会显示。

我有根据的猜测——你的窗口最大化了。我之所以做出这样的假设,是因为Cody Gray似乎能够让它出现在UserControl上。