none
winform中StatusStrip,MenuStrip,Panel停靠的问题 RRS feed

  • 问题

  • 现在form中有StatusStrip,MenuStrip,Panel三个控件,MenuStrip的dock=top,StatusStrip的dock=bottom,Panel的dock=fill。但是发觉一个问题,我用编程方式替换Panel中窗体时,会把StatusStrip控件给覆盖掉,如果把StatusStrip控件的RenderMode改成和MenuStrip一样的ManagerRenderMode话,切换Panel内的窗体时,StatusStrip控件会覆盖Panel控件,是Panel中的边缘子控件无法显示。不知道如何实现想MenuStrip的效果(Panel是停靠在MenuStrip控件的边缘),让Panel控件停靠在StatusStrip控件的边缘而不是窗体的边缘。谢谢~~

    2010年9月20日 7:16

答案

  • 我建议你还是认真看一下TableLayoutPanel吧。总的来说我跟你介绍一下

    1:TableLayoutPanel的每一个cell可以最多容纳一个控件

    2:一个控件可以占满X*Y个cell

    3:每一个row或者column都可以有:自动调整大小,百分比调整大小,像素绝对值大小

    4:每一个控件可以设置margin,也就是他跟cell边框的四个边距

     

    你只需要把MenuStrip放上去,那么剩下的空间就是Form的client了,用一个TableLayoutPanel充满它。然后其他所有控件都放在TableLayoutPanel上面。可以完全通过设计器来获得。建议你仔细学习TableLayoutPanel,根据我自己的经验,很少有什么排版要求是不能满足的 。当然对于一些特殊情况,你可能需要嵌套若干个TableLayoutPanel来做,不过这种情况很少见。

    2010年9月21日 6:56

全部回复

  • 使用TableLayoutPanel控件来排版你的东西
    2010年9月20日 8:45
  • 看过TableLayoutPanel控件了,好像不能满足我的要求,现在我只能通过编程的方法计算各个控件的大小来模仿实现停靠的功能。不知道还有什么别的方法可以简单实现吗,比如直接在设计器里面就能实现的。
    2010年9月21日 6:52
  • 我建议你还是认真看一下TableLayoutPanel吧。总的来说我跟你介绍一下

    1:TableLayoutPanel的每一个cell可以最多容纳一个控件

    2:一个控件可以占满X*Y个cell

    3:每一个row或者column都可以有:自动调整大小,百分比调整大小,像素绝对值大小

    4:每一个控件可以设置margin,也就是他跟cell边框的四个边距

     

    你只需要把MenuStrip放上去,那么剩下的空间就是Form的client了,用一个TableLayoutPanel充满它。然后其他所有控件都放在TableLayoutPanel上面。可以完全通过设计器来获得。建议你仔细学习TableLayoutPanel,根据我自己的经验,很少有什么排版要求是不能满足的 。当然对于一些特殊情况,你可能需要嵌套若干个TableLayoutPanel来做,不过这种情况很少见。

    2010年9月21日 6:56
  • 需要记住的是,对于Dock属性,添加控件的顺序会影响它们停驻的方式。例如,如果你对窗体添加控件A,指示其停驻填充,然后你对窗体添加控件B并指示其停驻顶部,控件B将覆盖控件A的上部。原因就是控件B被认为是在控件A的“前方”,因为它是在控件A之后添加的。

    要解决这种情况,你必须在Visual Studio中右击控件A,并在上下文菜单中选择“放到前面(Bring To Front)”。这样就能使控件A出现在控件B的前方,控件也就能像预期的那样运作了。

    2012年10月31日 6:45