001.判断一个Form是否已关闭并释放,需要从引用和对象两方面来判断,
判断引用是否为null: mainfm == null
判断引用的对象是否已释放: mainfm.IsDisposed
MainForm mainfm;
......
private void button_ok_Click(object sender, EventArgs e)
{
if (mainfm == null || mainfm.IsDisposed)
{
mainfm = new MainForm();
mainfm.Show();
}
else
{
mainfm.Show();
}
}
002.设置一个Form为MDI主窗口
属性IsMdiContainer设置为True
003.工具栏按钮同时显示图像与文字
设置DisplayStyle属性(ImageAndText为显示图像与文字)
设置TextImageRelation属性(ImageAboveText图像在上文字在下)
004.只运行一个程序实例
using System.Diagnostics;
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
if (Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName).Length > 1)
{
return;
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
005.根据字符串名称,实例化指定的Form.
在开发中,一般需要在TreeView中打开相应的Form,TreeView的Form名称保存在数据库中,双击TreeView需要根据字符串名称,实例化指定的Form.
格式: Activator.CreateInstance(Type.GetType("命名空间+类名"))
返回: 要访问新创建的实例则必须解包的句柄
描述: 使用命名的程序集和默认构造函数,创建名称已指定的类型的实例。
Form fm;
fm = (Form)Activator.CreateInstance(Type.GetType( "WindowsApplication2.Form2 "));
fm.Show();
// 第一步:得到类的全名(命名空间+类名)
// 第二部:根据全名得到类的类型
// 第三步:创建类实例
反射动态创建对象:
如果A,B,C,D都与执行代码同一个程序集.则可以这样调用
System.Reflection.Assembly.GetExecutingAssembly().CreateInstance("命名空间.类名", false);
如:
object o = System.Reflection.Assembly.GetExecutingAssembly().CreateInstance("MyNameSpace.A", false);
不同程序集的话.则要装载调用.如下:
System.Reflection.Assembly.Load("程序集名称").CreateInstance("命名空间.类名", false);
如:
object o = System.Reflection.Assembly.Load("MyDll").CreateInstance("MyNameSpace.A", false);
动态创建后再将o强制转换为IChar接口,如下:
IChar ichar = o as IChar;
如果转换失败则ichar为null值.
string fullName = this.GetType().FullName;
string Namespace = this.GetType().Namespace;
string name = this.GetType().Name;
006.TreeView
当前选中项: TreeView.SelectedNode
增加顶级节点:TreeView.Nodes.Add("Key", "Text")
增加同级节点:TreeView.SelectedNode.Parent.Nodes.Add("Key", "Text")
增加子节点: TreeView.SelectedNode.Nodes.Add("Key", "Text")
全部展开: TreeView.ExpandAll()
全部收拢: TreeView.CollapseAll()
007.c#与数据库的null值转换.
public static object ToDBValue(this object value)
{
return value == null ? DBNull.Value : value;
}
public static object FromDBValue(this object dbValue)
{
return dbValue == DBNull.Value ? null : dbValue;
}
008.当前程序的基目录
string currentDir = AppDomain.CurrentDomain.BaseDirectory //获得当前程序的
string filePath = System.IO.Path.Combine(CurrentDir,"filename.txt");
009.Log4Net
010.全局属性值
Application.Current.Properties["OperatorId"] //全局属性值
011.抛出异常
throw new Exception("error");
012.关于集合List<T>
List<int> list = new List<int>();
list.add(11);
list.add(22);
foreach(int i in list)
{
MessageBox.Show(i.ToString());
}
013.关于可空类型:
可空类型(null): 引用类型.自定义类、string、大部分类
不可空类型: 值类型. int、boolean、decimal、DateTime等.
可空值类型: 不可空类型后加?.如 int? i = null; 可以把int赋值给int?,不可以把int?赋值给int.
bool?转换为bool需要强制类型转换
复选框是否选中
if((bool)checkBox.IsChecked)
{
MessageBox.Show("选中");
}
if(checkBox.IsChecked == true)