C#.NET开发中常用的技术问题汇总(持续更新)

C#.NET开发中常用的技术问题汇总

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)

你可能感兴趣的:(C#.NET开发中常用的技术问题汇总(持续更新))