winforms 在windows窗体中启用滚动条

3j86kqsm  于 2023-05-18  发布在  Windows
关注(0)|答案(5)|浏览(192)

我正在开发一个windows窗体应用程序。在我的应用程序中,我将控件锚定到表单上,这样表单就可以最大化,控件也会相应地排列。此应用程序应支持不同的DPI值。
我已经将一些控件的锚点设置为底部、右和右下角。窗体的AutoScroll属性设置为true。当DPI值为默认值(96)时,控件按预期工作。但问题是,如果屏幕加载的DPI更高(如120),即使窗体滚动条启用,锚定在底部和右下角的控件也无法看到。
有人能就这个问题给我提意见吗?
问候,Eranga

hs1ihplo

hs1ihplo1#

在表单属性中设置AutoScroll = True

n3h0vuf2

n3h0vuf22#

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

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

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

panel1.SetAutoScrollMargin(int x,int y);
kb5ga3dv

kb5ga3dv3#

这是一个旧的帖子,但问题正在进行,相关的帖子只是不断到达SO
我在这里做的是一件很复杂的事情,而不是仅仅因为它是我google search的最上面的问题
问题很简单**“为什么我的ScrollableControl上不会出现该死的滚动条?“**
但没有明确的、明确的答案。因为原因很多。因为滚动条是否出现在控件上取决于:

  • 不仅根据它自身的属性设置
  • 而且还取决于父控件的状态
  • 以及任何子控件的状态。

人们很容易陷入随机玩弄价值观的陷阱,直到奶牛回家。或者去i/web上&希望找到一些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                   |               
--------------------------------------------------

我希望表单:

  • 用户不能调整大小
  • 通过以下方式响应动态内容:
  • 尽可能小地缩小到预定的最小形状尺寸。
  • 增长到预定的最大形状尺寸;并且此后在动态内容面板上提供适当的滚动条。

抓住它,通过每一个提交(从95 dccc 5开始只有9个),然后以一种理性和渐进的方式测试 * 你的 * 需求。当你做了可疑的状态改变时,一定要分支。
Irl:也许我是个笨手笨脚的人,但是我花了一个多小时的时间阅读MSDNs,试图(&失败)计算出.NET窗体控件属性的偶然性。这样做结构化的试错只花了20分钟就得到了我想要的东西。
y~bwc
我知道这是一个**yeaz ~但谁在乎呢?**但我必须把它从我的胸部。呵呵:
不得不解开并回答这个问题是因为我需要有利可图地承担微软的合同工作。paymasters可以相对来说(从开发人员pov)非技术性,并且阅读了很多东西,包括以下文字:快速,简单,直接,安全等,给人留下的印象。NETish是在公园里散步。我对此的问题是,我很难合理地解释为什么他们可能需要支付我n天的工作价值,以获得一个简单的滚动条出现在响应表单上。
在这一次,我从来没有走到那么远。哈哈,我花了几个小时涉水穿过MSDN Blahs试图使它发生。然后打了个哈欠,放弃了,继续务实的实施。被接受了。但现在是W/结束了,我是一个强迫症的傻瓜谁不能让事情过去。

mi7gmzs6

mi7gmzs64#

我正在阅读this page,我可以说它提供了一个准确和简单的解决方案,您的问题!
我测试了它,它对我来说效果很好。
使用说明:
1.将清单文件添加到项目中(项目->新建项目->选择清单类型)
1.将以下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);
q7solyqu

q7solyqu5#

1.从“表单”属性👉设置自动滚动= True:

2.将任意控件移到右下角:

相关问题