我有一个在Compact Framework上运行的.NET 2.0应用程序。它有许多不同的形式,最初设计为在具有特定屏幕分辨率的特定设备上运行。我现在希望让这个应用程序在其他一些具有非常不同的屏幕分辨率的设备上运行(有些具有完全相反的宽高比,其中屏幕现在高于它的宽度)。我的问题是如何在其他屏幕上更改表格以使其看起来不错?
这与在完整框架上设计表单略有不同,因为我必须设计这些表单以占据整个屏幕,因为屏幕非常小。我想过为每种类型的屏幕方向创建单独的表单(例如MyForm_Wide.cs,MyForm_Tall.cs等)。我希望能够重用非设计器生成的代码,该代码包含许多与UI控件绑定的业务逻辑。也许我可以以某种方式使用部分类来实现这一点(例如,MyForm.cs以某种方式被编译成MyForm_Wide.Designer.cs等)。我真的想避免每个屏幕方向的特定编译版本。我想到的另一种方法是尝试根据确定的屏幕大小在运行时重新排列一些控件。
你们有什么想法?
答案 0 :(得分:1)
我们使用Clarius的Orientation Aware Control框架。它不仅解决了外形尺寸问题,还解决了支持它的设备,方向变化(屏幕旋转)的问题。
与传统桌面开发相比,移动开发最独特的方面可能是需要支持越来越多的设备外形。
对于专业的移动开发人员来说,设计支持多种外形,分辨率和屏幕方向的移动应用程序并不是一件非常重要的事情,这是一项非常重要,耗时且具有挑战性的工作。一般来说,.NET Compact Framework v2.0中的内置对接和锚定功能还远远不够。
Orientation Aware Control允许设计和编码具有多个布局或外观的单个控件或表单,这些布局或外观根据可用的外形,分辨率和方向在运行时(和设计时)自动应用。其出色的Visual Studio表单和用户控制设计器集成以及零代码自适应UI行为使Orientation Aware Control成为任何针对多个设备的移动商店的必备伴侣,带来了专注于发展业务所需的生产力。 p>
答案 1 :(得分:1)
由于c#设计师非常“以像素为导向”,因此没有简单的方法来转换表单。
我不知道你想付出多少努力,但如果你有很多时间并想要一个非常灵活的解决方案,我建议你应该使用某种支持流布局,边框布局等的布局管理器
当然,最初的c#设计师对设计这些灵活的布局管理表单没有多大帮助。
但是使用布局管理器可能会降低表单的初始显示速度。如果您想要真正的高速表单显示,则必须在显示表单之前计算表单上所有控件的所有位置。重新排列控件并显示您的表单 - 然而这是很多编码,并且对gui更改不是很灵活。
答案 2 :(得分:1)
您应该将主窗体的“AutoScaleMode”属性设置为“DPI”。
然后,它是在表单上使用锚点和对接您的特定控件的问题。如果你这样做,紧凑的框架将保持你认为他们的位置。
此外,可以更改表单的“Form Factor”属性,以查看您的表单在不同大小和形状的移动设备上的外观。
答案 3 :(得分:1)
我想我已经弄明白了我想做什么。出于某种原因,即使在我的高分辨率设备上,根据WinForms API,DPI仍然显示为96,因此自动缩放功能没有做任何事情。相反,如果我在控件上手动调用Scale
,我会让它们按照我想要的方式进行扩展。现在,这并没有完全解决我在我不想进行任何缩放的情况下的问题,但如果屏幕的宽高比与我最初设计的相比,我确实想重新组织我的控件。对于这种情况,我想我会考虑使用不同的布局面板(例如FlowLayoutPanel
和TableLayoutPanel
)来有希望地适当地组织控件。
希望这对未来的Google员工有所帮助......
答案 4 :(得分:0)
标签上的“自动尺寸”属性在切换外形时也会混乱 - 顺便说一句 - 所以我将其设置为false。