【问题标题】:Enable scroll bars in windows forms在 Windows 窗体中启用滚动条
【发布时间】:2012-04-18 20:45:27
【问题描述】:

我正在开发一个 Windows 窗体应用程序。在我的应用程序中,我将控件锚定到表单,以便可以最大化表单并相应地安排控件。此应用程序应支持不同的 DPI 值。

我已将某些控件的锚点设置为底部、右侧和右下角。窗体的 AutoScroll 属性设置为 true。当 DPI 值为默认 (96) 时,控件按预期工作。但问题是,如果屏幕以更高的 DPI(如 120)加载,即使启用了表单滚动条,也无法看到锚定在底部和右下角的控件。

有人可以就这个问题给我建议吗?

问候, 埃兰加

【问题讨论】:

  • 我不确定您的问题描述与是否启用滚动条有什么关系。您是说表单在有滚动条和没有滚动条的情况下表现不同?
  • 这个链接对你有帮助吗stackoverflow.com/questions/6841285/…
  • @Lister 先生:是的,先生。在屏幕中看不到锚定在右下角的控件。它们设置在屏幕边缘之外。如果可以启用滚动条,则可以显示。

标签: c# winforms


【解决方案1】:

创建一个名为panelPanel,然后执行以下操作:

panel1.autoscroll  = true;
panel1.BorderStyle = BorderStyle.FixedSingle;

使用此方法设置滚动宽度和高度:

panel1.SetAutoScrollMargin(int x,int y);

【讨论】:

    【解决方案2】:

    我正在阅读this page,我可以说它为您的问题提供了一个准确而简单的解决方案!

    我对其进行了测试,它对我来说效果很好。

    说明:

    1. 将清单文件添加到您的项目(Project --> New Item --> 选择清单类型)
    2. 将以下 XML 添加到您的 app.manifest(可能是另一个名称)中:
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3" >
       <asmv3:application>
            <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
                 <dpiAware>true</dpiAware>
            </asmv3:windowsSettings>
       </asmv3:application>
    </assembly>
    
    1. 将以下 C# 代码添加到调用组件初始化的类中 (InitializeComponent();)
    [DllImport("shcore.dll")]
    static extern int SetProcessDpiAwareness(_Process_DPI_Awareness value);
    
    enum _Process_DPI_Awareness
    {
        Process_DPI_Unaware = 0,
        Process_System_DPI_Aware = 1,
        Process_Per_Monitor_DPI_Aware = 2
    }
    
    1. 现在只需在初始化组件方法上方添加此代码行(默认为InitializeComponent();
    SetProcessDpiAwareness(_Process_DPI_Awareness.Process_DPI_Unaware);
    

    【讨论】:

      【解决方案3】:

      这是一个旧帖子,但问题仍在继续,相关帖子不断到达SO

      我在这里做 necro 的事情,而不是仅仅因为它出现在我的 google search 之上而解决一个最近的问题

      问题很简单:“为什么我的ScrollableControl 上不会出现该死的滚动条?”

      但是不可能有明确的答案。因为原因是多方面的。因为滚动条是否出现在控件上取决于:

      • 不仅取决于它自己的属性设置
      • 但也取决于它的父控件的状态
      • 以及任何子控件的状态。

      在奶牛回家之前,很容易陷入随机旋转道具值的陷阱。或者去 i/webs &希望找到一些SO foos。但是哦,亲爱的。以下是一些相关的SO 帖子,其中包含各种出色的建议解决方案:

      Horizontal Scrollbar is not visible on DataGridView

      Horizontal scrollbar not showing on my textbox

      How to set scroll bar in Windows form

      How to make scrollbars appear in a resizable panel when the contained control is too big for it?

      Scrollable Form in c#, AutoScroll=true doesn't work

      How to get scrollbar in Panel in VB.Net?

      VS-designer 属性页面的屏幕截图(如这里)甚至一些基于代码的极端解决方案......我的最爱:

      Add vertical scroll bar to panel in .NET

      how to add Vscroll control to form in Visualbasic.net?

      /叹息/


      一般答案

      ..以 minimal github 解决方案的形式来探索一些 .NET 滚动条的巫术:

      https://github.com/violet313/TestWinForms/tree/Test1-Body-Panel

      这是一个使用.NET4.52 frameworkVisual Studio 2015 解决方案。

      在解决方案中,我试图创建一个响应一些要显示的动态文本数据的表单。这是我最终寻求的基本布局:

      --------------------------------------------------
      |      fixed-size form header       |            | 
      ------------------------------------|   side     |
      |                                   |   panel    |
      |      dynamic content panel        |   stuff    |
      |                                   |            |
      --------------------------------------------------
      |      fixed-size form trailer                   |               
      --------------------------------------------------
      

      我希望表单:

      • 用户不能调整大小
      • 通过以下方式响应动态内容:

        • 尽可能缩小到预先确定的最小表单尺寸。
        • 增长到预先确定的最大表单大小;然后在动态内容面板上提供适当的滚动条。

      抓住它,检查每个(从 95dccc5 开始只有 9 个)提交,然后以理智和渐进的方式测试您的要求。每当您进行可疑的状态更改时,请务必进行分支。

      Irl:也许我是个笨蛋,但我花了一个多小时阅读 MSDN,试图(& 失败)找出 .NET 表单控制属性的意外情况。以这种方式进行结构化的试错只花了我 20 分钟就得到了我想要的。


      y~bwc

      我知道这是一个 yeaz ~ 但谁在乎呢? 但我必须摆脱我的胸膛。呵呵 :

      呸。不得不潜伏并回答这个问题是出于我的需要 有利可图地承担 Microsoft 合同工作。出纳员可以 相对(来自开发人员的观点)非技术性的,并且阅读了很多 的东西,包括:快速,简单,直接,安全, 等等,给人的印象是 .NETish 是一种漫步 公园。我的问题是我会遇到困难 试图合理地解释为什么他们可能需要支付我的 n 天费用 为了让一个简单的滚动条出现在 响应形式。

      在这种情况下,我从来没有走那么远。哈哈。我花了几个小时 涉足试图实现它的 MSDN 废话。然后打了个哈欠, 放弃,并继续务实的实施。这是 公认。但现在是结束了,我是一个不能让 事情是这样的。

      【讨论】:

      • 为你的强迫症加一个 :) 这让你写了一个详细的答案
      【解决方案4】:

      在表单属性中设置AutoScroll = True

      【讨论】:

      • 这没有启用水平滚动条
      • @Pரதீப் 仅在需要时才启用水平条。如果表单不够长,则滚动条将不可见。
      猜你喜欢
      • 2013-08-01
      • 1970-01-01
      • 2011-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多