'VB
Me.WindowState = FormWindowState.Maximized
Me.FormBorderStyle = FormBorderStyle.None
Me.ControlBox = False
Me.Menu = Nothing
4.2. 什么时候用窗体的构造器?什么时候用窗体的Load事件?
窗体的load功能是做界面操作的最好方法。典型又安全的做法是在构造器中创建数据和控件的实例。任何包含用户界面的控件或窗体的初始化,都应该在load功能中完成。例如:在窗体的构造器中完成控件对象的建立,然后在load功能中设置控件的位置等 是安全的做法。
4.3. 怎样把最小化按钮换成关闭按钮?
通过开发环境的设计器,可以把窗体的自动最小化模式转变成关闭模式,或者通过变成实现。(x)按钮自动最小化应用程序,(ok)按钮回关闭程序。
在设计器中转化窗体的风格
打开Visual Studio环境的窗体设计器,查看属性。在窗体上右键并选择Properties,在Window Style 部分把MinimizeBox设置为 False。
在代码中转变窗体风格
简单的在窗体的load功能中添加以下一行代码:
//C#
this.MinimizeBox = false;
'VB
Me.MinimizeBox = False
4.4. 怎样在.net精简框架上建立多窗体系统结构?
这篇文章讨论了如何在.net精简框架上为应用程序有效的建立用户界面:
http://msdn.microsoft.com/library/en-us/dnnetcomp/html/netcfuiframework.asp
4.5. 怎样提高.net精简框架应用程序的载入速度?
通过下面文章中的优化技巧,减少.net精简框架应用程序的载如时间:
http://msdn.microsoft.com/library/en-us/dnnetcomp/html/netcfimproveformloadperf.asp
4.6. 运行时怎样修改窗体的风格?
这篇快速入门教程描述了在pocket pc应用程序中使用代码改变窗体界面:
http://samples.gotdotnet.com/quickstart/CompactFramework/doc/ppcformproperties.aspx
4.7. 怎样滚动窗体的内容?
这篇快速入门教程演示了如何使用纵向和横向滚动条 还有如何在窗体中绘制一个图象:
http://samples.gotdotnet.com/quickstart/CompactFramework/doc/scrolling.aspx
4.8. 怎样制作一个浮动的窗体?好象所有的窗体总是全屏状态的。
有边界的最顶端的窗体总是全屏的,不能移动或改变大小。没有边界或子窗体可以移动和改变大小。
使用: Form.BorderStyle = BorderStyle.None; //来设置有无边界
4.9. 怎样强迫一个窗体变成最小化?
请查看本问 "6.6. 如何是窗口一直保持最小化? " 部分。
4.10. 我有一个包含很多控件的智能设备窗体,为什么运行的时候出现"NotSupportedException"错误?
如果你的窗体中包含了很多控件,当你运行的时候可能会有NotSupportedException的错误。如果你是在Debug模式下运行的话,你会发现异常是来自于窗体的InitializeComponent部分。这种情况是由于精简框架CLR在编译类的方法时,会有64kb的限制造成的。这意味着CLR把方法(如,InitializeComponent)翻译成中间语言时,返回的机器码不能超过64KB。如果超过了64KB,NotSupportedException将被抛出。这也是为什么容易在Debug模式(F5)下导致错误,而非Debug模式(Ctrl+F5)却不容易出错。因为Debug模式运行时会生成更多容量的调试代码。
除了模拟器,您也可能在智能设备上遇到这个错误,因为即时编译代码根据因CPU类型而异的(如,PocketPC使用的是ARM指令,而模拟器上使用的x86指令)
没有一个准确的数字说明,一个窗体中到底可以包含多少个控件。因为不同控件的产生的代码量不一样。如,一个Button控件,比TabControl控件产生的代码要少。还会因由设置了多少属性而异。包含集合的控件,象ListBox或TreeView,如果在设计时向属性框中填入了很多值,编译时将产生大量代码。同样,设置了Localized的窗体(Localizable属性为true),会比没设置localize的窗体产生更多代码。因为localize需要从资源文件中读取属性值,放在InitializeComponent方法中。
果你遇到这种情况,下面有一些技巧帮助你避免它的发生:
把一个窗体的代码分成多个窗体。过多控件的窗体,会影响程序开始时载入的性能。尽可能把用户界面分成两个或多个窗体。
不要在设计时填充大的、内部的、带集合的控件。如果你把很多节点集合加到TreeView控件中,这样会在InitializeComponent方法中加入大量代码。尽可能把加入集合的代码移到Form.Load事件中。这样做的缺点是,要在设计时编辑这些集合将变得不容易,但它有助于分割代码。
不要把自己的代码添加到InitializeComponent方法中,这对通常的编码都有用,不建议添加、修改设计起生成的代码。这样做会造成设计器不可知的错误。如果你想添加自己的启动代码,你应该在Form.Load事件中做。
运行时初始化类似的控件。比如,有12个Button控件,只是文字和位置不同,你应该考虑使用循环来设置属性,而不是在设计时设置属性。在次,如果你自己写代码来实现它,不要把代码放在InitializeComponent方法中。
编辑InitializeComponent方法的缺点是,在InitializeComponent代码外建立对象实例的代码,将不能在设计器重被设计。同样,如果你手动修改了InitializeComponent中的代码,你会发现,设计器可能不再识别你修改的代码。所以以上技巧的前提是,不要修改InitializeComponent中的代码。
4.11. 哪个是正确关闭窗体的方法:Appplication.Exit 还是 Form.Close ?
Application.Exit是类似Win32平台下的PostQuitMessage()硬性退出。收回所有弹出的信息,释放呼叫堆栈,把执行权返回给系统。
在windows平台(Win32或.NET)下正确关闭应用程序的方法是关闭主窗体(如:Form.Close)。所有主窗体结束时仍存在的窗体需要手工关闭。Any window that's still present after the main message pump ends needs to be manually closed. 好的方法就是在应用程序调用Form.Close或Form.Dispose退出之前,关闭所有窗体。需要记住.NET框架的OnClosing()就是Win32平台下WM_CLOSE的托管版本,而不是WM_DESTROY。
另外,使用form.Close()的话,你的程序可以在OnClosing或OnClosed事件中处理释放资源、关闭文件等操作。如果使用Application.Exit退出,这些事件将不会被触发。
4.12. Why does showing a MessageBox on Windows Mobile 2003 for Smartphone with the Abort, Retry, and Fail set of buttons or the Yes, No, Cancel set of buttons, or the third button as the default button result in a NotSupportedException?
Windows Mobile 2003 for Smartphone only supports 1 or 2 button MessageBoxes.
4.13 How do I get an icon in the Pocket PC Start Menu Most Recently Used (MRU) List?
Create a shortcut to your application somewhere under \windows\start menu\programs. When your application is launched from this shortcut an icon for your applications will appear the MRU list.