简介
Windows Mobile Second Edition 软件支持具有横向和方屏幕显示器的设备这是对早期 Pocket PC 上传统的仅纵向显示器的附加功能当在方形或横向显示器上运行为纵向显示器设计的应用程序时操作系统将自动向窗体添加一个纵向滚动条以便使用户能够查看整个窗体仅当有一个控件由于迁移到横向而向用户隐藏时才会发生这种情况在大多数情况下这不是用户界面在横向显示器上显示的理想方式另外还有两种替代方式一个是创建能够在两个方向下正常工作的单个界面布局另一个是为每个方向创建一个单独的界面布局
要使用单个布局在所有三个方向下正常工作请对窗体进行排列以便所有控件都位于一个方形的 x 区域中如图 所示这是最容易实现的解决方案但它可能无法满足复杂窗体的需要
图 具有被设置为方形区域的控件的纵向和横向显示器
要充分利用纵向和横向这两个方向必须为每个方向定义单独的布局此外还必须使用 FormResize 事件来确定当前的方向并根据需要重新定位控件
注在大多数情况下没有必要为方形屏幕创建自定义布局相反可以使用纵向布局并且系统将自动为其添加垂直滚动条
为每个方向创建单独的布局代码
为这两个方向中的每一个定义一个函数在这些函数中设置窗体上每个控件的 Size 和 Location 属性
下面的示例说明了如何更新 Visual Studio NET 中随附的 WebCrawler 示例以使其能够识别方向可以将相同的步骤应用于任何现有应用程序或新应用程序以使其能够识别方向
Visual Studio NET 窗体设计器不显式支持多个布局的创建但仍然可以将其用作工具以帮助您使用以下过程创建相应的代码
使用设计器为纵向显示器创建布局
查看该设计器生成的代码该代码位于一个名为 InitializeComponent 的函数中可以通过展开Windows 窗体设计器生成的代码区域找到
创建一个名为 Portrait() 并以纵向模式定位控件的新函数并且将用于设置控件的 Location 和 Size 属性的代码从 InitializeComponent 复制到 Portrait() 中
使用该设计器以横向模式所需的布局重新定位控件
使用该设计器为横向模式生成的定位代码来重复执行步骤
protected void Portrait() { thiscrawlTimeLocation = new SystemDrawingPoint( ); thiscrawlTimeSize = new SystemDrawingSize( ); thiscrawlTimeLabelLocation = new SystemDrawingPoint( ); thiscrawlTimeLabelSize = new SystemDrawingSize( ); thiscrawlStartTimeLocation = new SystemDrawingPoint( ); thiscrawlStartTimeSize = new SystemDrawingSize( ); thiscrawlStartedLabelLocation = new SystemDrawingPoint( ); thiscrawlStartedLabelSize = new SystemDrawingSize( ); thislightLocation = new SystemDrawingPoint( ); thislightSize = new SystemDrawingSize( ); thislightLocation = new SystemDrawingPoint( ); thislightSize = new SystemDrawingSize( ); thislinkCountLocation = new SystemDrawingPoint( ); thislinkCountSize = new SystemDrawingSize( ); thislinkCountLabelLocation = new SystemDrawingPoint( ); thislinkCountLabelSize = new SystemDrawingSize( ); thiscurrentPageBoxLocation = new SystemDrawingPoint( ); thiscurrentPageBoxSize = new SystemDrawingSize( ); thiscurrentPageLabelLocation = new SystemDrawingPoint( ); thiscurrentPageLabelSize = new SystemDrawingSize( ); thisaddressLabelLocation = new SystemDrawingPoint( ); thisaddressLabelSize = new SystemDrawingSize( ); thisnoProxyCheckLocation = new SystemDrawingPoint( ); thisnoProxyCheckSize = new SystemDrawingSize( ); thisstartButtonLocation = new SystemDrawingPoint( ); thisstartButtonSize = new SystemDrawingSize( ); thisaddressBoxLocation = new SystemDrawingPoint( ); thisaddressBoxSize = new SystemDrawingSize( ); } protected void Landscape() { thiscrawlTimeLocation = new SystemDrawingPoint( ); thiscrawlTimeSize = new SystemDrawingSize( ); thiscrawlTimeLabelLocation = new SystemDrawingPoint( ); thiscrawlTimeLabelSize = new SystemDrawingSize( ); thiscrawlStartTimeLocation = new SystemDrawingPoint( ); thiscrawlStartTimeSize = new SystemDrawingSize( ); thiscrawlStartedLabelLocation = new SystemDrawingPoint( ); thiscrawlStartedLabelSize = new SystemDrawingSize( ); thislightLocation = new SystemDrawingPoint( ); thislightSize = new SystemDrawingSize( ); thislightLocation = new SystemDrawingPoint( ); thislightSize = new SystemDrawingSize( ); thislinkCountLocation = new SystemDrawingPoint( ); thislinkCountSize = new SystemDrawingSize( ); thislinkCountLabelLocation = new SystemDrawingPoint( ); thislinkCountLabelSize = new SystemDrawingSize( ); thiscurrentPageBoxLocation = new SystemDrawingPoint( ); thiscurrentPageBoxSize = new SystemDrawingSize( ); thiscurrentPageLabelLocation = new SystemDrawingPoint( ); thiscurrentPageLabelSize = new SystemDrawingSize( ); thisaddressLabelLocation = new SystemDrawingPoint( ); thisaddressLabelSize = new SystemDrawingSize( ); thisnoProxyCheckLocation = new SystemDrawingPoint( ); thisnoProxyCheckSize = new SystemDrawingSize( ); thisstartButtonLocation = new SystemDrawingPoint( ); thisstartButtonSize = new SystemDrawingSize( ); thisaddressBoxLocation = new SystemDrawingPoint( ); thisaddressBoxSize = new SystemDrawingSize( ); }[] []