【问题标题】:Why is the SizingGrip of StatusStrip not showing?为什么 StatusStrip 的 SizingGrip 不显示?
【发布时间】:2013-08-02 07:53:08
【问题描述】:

我想将 StatusStrip 添加到 UserControl 并在运行时调整此 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(小三角形)。为什么不呢?

【问题讨论】:

  • 我无法重现此问题。我尝试创建一个空的 UserControl,使用您的代码在构造函数内向其添加一个 StatusStrip,然后将该 UserControl 添加到一个空表单中。 I see the size grip just fine(这很丑,因为它是为SystemColors.Control的背景色设计的)。
  • 我将面板内的 UserControl 用作可以在面板内移动的“小部件”。我让它可调整大小处理鼠标事件。但是,如果调整 UserControl 的高度大小,这完全是错误的,所以我认为我可能会使用 StatusStrip。但显然不是。 :-)

标签: c# .net winforms user-controls controls


【解决方案1】:

它没有显示,因为 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 上。

【讨论】:

  • 是的,它是为表单设计的。但为什么它不适用于用户控件?是什么阻止它?您认为绘画代码会检查对象在运行时是否可调整大小?
  • @CodyGray,我已经发布了用于确定其可见性的代码。如果控件甚至能够使用GetRootHwnd 恢复窗口,则在所述窗口最大化时,尺寸控制夹仍将隐藏。
  • 优秀。这使得这是一个更好的答案。 +1
  • @CodyGray,非常感谢!有时需要一点刺激才能进入反映的代码,但答案总是存在的。 :D
  • 天啊,你是对的。尺寸夹点不可见,因为表格已最大化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-16
  • 2012-06-29
  • 2015-12-07
  • 2021-01-15
  • 2021-08-29
  • 2013-02-04
  • 2014-04-12
相关资源
最近更新 更多