7.31. How do I build a C# Smart Device project from the command line?
Enter the following commands as single lines (each is broken into two lines for clarity): set CFPath=%SystemDrive%\Program Files\Microsoft Visual Studio .NET 2003 CompactFrameworkSDK\v1.0.5000\Windows CE
csc Form1.cs /noconfig /nostdlib /lib:"%CFPath%" /r:"%CFPath%\system.dll";"%CFPath% system.drawing.dll";"%CFPath%\system.windows.forms.dll";"%CFPath%\mscorlib.dll"
7.32. How do I abort an executing thread??
There is no Abort method to the Thread class in the .NET Compact Framework so a thread must be aborted by returning from the executing procedure. Typically, an application will notify threads of a closing event by setting a global variable. The main thread will then wait for worker threads to finish processing before closing the application. The following HOWTO article demonstrates how to accomplish this.
http://msdn.microsoft.com/library/en-us/dncfhowto/html/stopmt.asp
7.33. Why can't I play a movie on the Pocket PC emulator?
Windows Media Player is only available on the Pocket PC 2003 emulator. The Windows Media Player install package is for installation on a hardware device connected through ActiveSync and will not install to the emulator.
7.34. How do I suppress Form titles from showing in the active applications list?
The Active Programs list on the Pocket PC enumerates all open Forms. To stop a Form from being displayed in the list, simply set the Form's caption to be an empty string. The following example shows how to keep only the application name in the list while a Form is displayed from within another Form:
//C#
string AppName = "MyApp";
Form1 form1 = new Form1();
this.Text = "";
form1.Text = AppName;
form1.ShowDialog();
this.Text = AppName;
'VB
Dim AppName As String = "MyApp"
Dim form1 As New Form1()
Me.Text = ""
form1.Text = AppName
form1.ShowDialog()
Me.Text = AppName
7.35. How do I access a Control from its instance name?
You can use Reflection to look up a control instance by its name. Here is some sample code:
//C#
private void Form1_Load(object sender, System.EventArgs e)
{
ComboBox c = (ComboBox)this.ControlFromName("combobox1");
c.Items.Add("1");
this.GetControls();
}
private Control ControlFromName(string name)
{
object o = this.GetType().GetField(name,
System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance |
System.Reflection.BindingFlags.IgnoreCase).GetValue(this);
return((Control)o);
}
private void GetControls()
{
System.Reflection.FieldInfo[] fis = this.GetType().GetFields
(
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Instance |
System.Reflection.BindingFlags.IgnoreCase
);
foreach(System.Reflection.FieldInfo fi in fis)
{
if (fi.GetValue(this) is Control)
MessageBox.Show(fi.Name);
}
}
'VB
Private Function ControlFromName(ByVal name As String) As Control
Dim o As ObjectDim o As Object
o = Me.GetType().GetField(name, Reflection.BindingFlags.NonPublic Or _
Reflection.BindingFlags.Instance Or _
Reflection.BindingFlags.IgnoreCase).GetValue(Me)
Return (CType(o, Control))
End Function
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
Dim c As ComboBox
c = CType(ControlFromName("_combobox1"), ComboBox)
c.Items.Add("1")
Me.GetControls()e.GetControls()
End Sub