.net精简框架的控件不支持OnEnter和OnLeave方法,包括Windows.Forms.Control基类。但是,因为支持Control.OnMouseMove方法,您可以通过它和Control.Capture 属性判断鼠标什么时候进入和离开控件。
http://samples.gotdotnet.com/quickstart/CompactFramework/doc/enterleave.aspx
5.20. 如何做一个 owner-drawn List Box?
您可以制作一个.net精简框架的owner drawn list box。.net精简框架的ListBox或其他控件不支持DrawMode、DrawItem, 或其他drawing方法,但您可以编程实现。这篇快速入门教程提供一个自定义控件类,建立一个owner-drawn list box,并实现了选择字体的控件的功能。
http://samples.gotdotnet.com/quickstart/CompactFramework/doc/ownerdrawnlistbox.aspx
5.21. 如何做一个多选框判断真假?
这篇快速入门教程提供了在Windows.Forms.CheckBox控件上建立真/假多选框:
http://samples.gotdotnet.com/quickstart/CompactFramework/doc/tfcheckbox.aspx
5.22. 设置InputPanel.Enabled = true的时候为什么出现异常?
InputPanel组件需要窗体包含MainMenu控件,而且那个窗体是显示在屏幕上的。
5.23. 为什么自定义控件不会自动继承父类的字体?
这个功能不被.net精简框架所支持。
5.24. 为什么当输入字符时,NumericUpDown 和 DomainUpDown 控件不会引发 ValueChanged 和 SelectedItemChanged 事件?
在代码中改变控件的值 或 按下了上、下箭头才会触发ValueChanged和SelectedItemChanged事件。当用户往控件中输入字符的时候时不会触发的。
5.25. 为什么NumericUpDown控件增长的值不是设置好的值?
当您按了上、下后出现的值,不是增长值的倍数,它将向着那个方向(上或下)直到下一个增长值的倍数的值。
5.26. 为什么StatusBar不能放在窗体的任意位置?一定要在底部?
StatusBar控件只能停靠在窗体的底部,它的大小不能改变。
5.27. 为什么我的控件自动继承了父控件的背景色?
这个功能不被.net精简框架所支持。可以采取的方法是继承OnParentChanged方法手动设置颜色:
//C#
protected override void OnParentChanged(EventArgs e)
{
base.OnParentChanged(e);
this.BackColor = Parent.BackColor;
}
'VB
Protected Overrides Sub OnParentChanged(ByVal e As EventArgs)
MyBase.OnParentChanged(e)
Me.BackColor = Parent.BackColor
End Sub 'OnParentChanged
5.28. 为什么NumericUpDown控件能接受decimal类型的值,但不会显示大于2^16的值?
虽然NumericUpDown控件接受decimal类型的值,但.net精简框架把这个控件的值当作int类型来处理。如,10.23当作10。同样此控件在PocketPC上不接受大于带符号的16位整型。
5.29. 为什么不能在DomainUpDown 中输入文字,而要选择?
DomainUpDown控件不会对输入的文字进行确认(不象完整的.net框架)。如果您先输入了一些文字,再按上、下箭头,它会显示内容改变前的值的下一个值。
5.30. 为什么OpenFileDialog被限制在"My Documents" 文件夹中?
OpenFileDialog的初始化目录被限制在"My Documents"文件夹或它的子文件夹中。这个限制是由PocketPC系统强加的,为了帮助用户在标准目录下管理自己的文档。
5.31. How can I activate the SIP (InputPanel) without a menu?
The SIP can be activated by P/Invoking the function "SipShowIM" as follows. //C#
using System.Runtime.InteropServices;
const uint SIPF_OFF = 0x0;
const uint SIPF_ON = 0x1;
[DllImport("coredll.dll")]
private extern static void SipShowIM(uint dwFlag);
'VB
Imports System.Runtime.InteropServices
Const SIPF_OFF As Integer = &H0
Const SIPF_ON As Integer = &H1
<DllImport("coredll.dll")> _
Private Shared Function SipShowIM(ByVal dwFlag As Integer) As Integer
End Function
5.32. How do I add a subnode to every node in a TreeView?
Adding subnodes to all nodes is accomplished by iterating through all of the nodes in the TreeView and adding a new node to each.
//C#
foreach (TreeNode node in treeView1.Nodes)
{
node.Nodes.Add(new TreeNode("SubNode"));
}
'VB
Dim node As TreeNode
For Each node In treeView1.Nodes
node.Nodes.Add(New TreeNode("SubNode"))
Next node
5.33. How do I determine the number of rows or columns in a DataGrid?
The number of rows and columns in a DataGrid can be determined from the data source itself. For example:
//C#
DataSet ds = new DataSet();
int numRows = ds.Tables[0].Rows.Count;
int numCols = ds.Tables[0].Columns.Count;