【.NET】【实践】

// 读txt到string
string str = File.ReadAllText(filePath, Encoding.Default);
==>EntryPoint
==>SingleAppInstance(OnStartup)==>App(OnStartup)==>MainWindow(OnActivate)->setMsg->setArgs
==>CmdDispatcher(DispatchWork)==》OpenFormInTab(OpenWinArgs args )
或
==>SingleAppInstance(OnStartupNextInstance)==>App(Activate)==>MainWindow

url带中文参数的解决办法
NameValueCollection nc = HttpUtility.ParseQueryString(strUrlQuery,Encoding.UTF8);//获取传入的是url字符串(十六进制格式字符串) , 编码成utf-8
string clmc=HttpUtility .UrlDecode(nc["url"],Encoding .UTF8);//用UTF8解码字符串,就可以看到中文了
DateTable转数组
     Func<DataRow, double> selector = d => d.Field<double>("列名");
double[] 数组= dt.AsEnumerable().Select(selector).ToArray();
输出-dynamic类型的COM对象-被编译成什么类型
MessageBox.Show(Microsoft.VisualBasic.Information.TypeName(dynamic类型的COM对象));
DateTime转string
dateTimePicker1.Value.ToString("yyyy-MM-dd HH-mm-ss"); 
string时间转形式
Convert.ToDateTime(DatetimeString).ToString("yyyy-MM-dd HH-mm-ss"); 
让输入框输入的是数字,不是就报错
  try
            {
                gcz= Convert.ToDouble(SJCX_GCZ.Text);
            }
            catch (Exception)
            {

                MessageBox.Show("input error");
                return;
            }

时间选秒 //CustomFormat:yyyy-MM-dd HH:mm:ss;  Format:Custom;


问题
    dbf from子语句错误。:子语句的路径中有+号,空格
    通过get set 设值,错误:值不能为空,参数value;解决:原因未知,但有解决办法:公开该变量,直接修改变量
    foreach 语句是对枚举数的包装,它只允许从集合中读取,不允许写入集合。也就是,不能在foreach里遍历的时侯把它的元素进行删除或增加的操作的
    关闭窗体后进程仍在工作:在窗体的FormClosing事件处理方法中,使用代码System.Environment.Exit(0)强制退出当前进程
    C#修改注册表不生效:1.程序的启动权限问题   2.修改的user下而不是machine下    3.你操作的可能32位的目录,不让你改64位的目录
        如果程序集是32位的,而机器是64位的,RegistryKey会默认转向HKLM>Software>Wow6432Node下面去找相关节点,而不是在Software下面找,WOW64是x86仿真器,允许32位基于Windows的应用程序在64位Windows上无缝运行,32位进程无法加载64位DLL以执行,而64位进程无法加载32位DLL以供执行
        “HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\SMS\SRSRP”,
    for循环里执行线程,i 出现多次,解决:把 i 赋值给中间变量,再在线程里使用,因为线程内部类跟调用它的类是平级的,i 可能还没来得及变,线程就又去取 i 了,就出问题了
    更新Combox的数据绑定,重新查询填充



只打开一个窗体
if (frmModelArgs == null || frmModelArgs.IsDisposed)
{
    frmModelArgs = new frmModelArgs();
    frmModelArgs.Show();
}
else
{
    frmModelArgs.Activate();//如果被hide就用show
}



//6.UrlProtocol 网页调用本地程序
    southgis://192.168.10.59?user=admin&cmd=scan&type=jyscan&djbh=2018071900001&opid=900750&clmc=%E6%89%AB%E6%8F%8F2018071900001&token=eyJ0eXAiOi
    1.HKEY_CLASSES_ROOT/SouthGIS/shell/open/command 的默认值
        写值  "C:\桌面\ihaphelper\02源码\trunk\southww\Output\southww.exe" "%1" //这个"%1"是传递给 exe的参数。
        HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Run 值: southww:""
    2.直接在网页里href 调用 写的链接
    3.传参
        写一个接收参数的控制台程序来接收“southgis://192.168.10.59?user=admin&cmd=scan&type=jyscan”这个字符串,用来解析参数并启动主程序
        参数传入--》通过StartupEventArgs--》单例控制类--》启动APP--》传给MainWindow=》cmdDispatcher根据参数检查版本---》VersionHelper检查



//5.操作Excel
        1:一种是一格一格的对应数据填入Excel表格中(速度很慢);      
        2:一种是以行为单位填入Excel表格中(比较快);      
        3:最后一种是批量把数据组合成二维数组一次性填入Excel表格中(非常快))。
        
        string path = System.AppDomain.CurrentDomain.BaseDirectory + "日报模板.xlsx";
        //这是读取Excel文件的一种方式
        Microsoft.Office.Interop.Excel.Application appExcel = new Microsoft.Office.Interop.Excel.Application();
        
        appExcel.Visible = false; //不显示EXCEL
        appExcel.DisplayAlerts = false; //不提示信息
        appExcel.ScreenUpdating = false; //停止更新屏幕,加快速度
        appExcel.AlertBeforeOverwriting = false;//设置禁止弹出保存和覆盖的询问提示框 
        Workbook wookbook = appExcel.Workbooks.Open(path);
        //填充一列
        //填充一维数组的话结果会是全部都是数组第一个值,必须填充二维数组
        wookbook.Worksheets["盾构区间(K3+100~K3+300)"].Range("B7", "B37").Value =二维数组或单个值;
        //wookbook.Worksheets["盾构区间(K3+100~K3+300)"].Range("B7").Value =值;
        
        wookbook.Save(); //保存
        wookbook.Close(); //关闭工作薄
        appExcel.Quit(); //关闭EXCEL
        
        Range.Value2与Value属性仅差是Value2属性不使用货币和日期数据类型。 您可以返回格式化与这些数据类型为浮点数,使用Double数据类型的值。
        绝对引用:单元格中的绝对单元格引用(例如 $A$1)总是在指定位置引用单元格。


//动态加载dll 不能卸载!
            //1、利用反射进行动态加载和调用.
                //利用dll的路径加载,同时将此程序集所依赖的程序集加载进来,需后辍名.dll
                //Assembly.LoadFile 只加载指定文件,并不会自动加载依赖程序集.Assmbly.Load无需后辍名 
            //2、加载dll后,需要使用dll中某类.
            //3、需要实例化类型,才可以使用,参数可以人为的指定,也可以无参数,静态实例可以省略
            //4、调用类型中的某个方法:需要首先得到此方法
            //5、然后对方法进行调用,多态性利用参数进行控制
            
            Assembly assembly=Assembly.LoadFrom("DllPath"); 
            Type type=assembly.GetType("类名");//用类型的命名空间和名称获得类型 
            Object 类实例= Activator.CreateInstance(类,"构造参数");//利用指定的参数实例话类型
            MethodInfo myMethod=type.GetMethod("方法名");//通过方法名称获得方法
            myMethod.Invoke(类实例,new object [] { "params" });//根据参数直线方法,返回值就是原方法的返回值
            
            //实现动态加载Dll 原理如下:
                //1、利用反射进行动态加载和调用.
                Assembly assembly=Assembly.LoadFrom(DllPath);
                //利用dll的路径加载,同时将此程序集所依赖的程序集加载进来,需后辍名.dll
                Assembly.LoadFile 只加载指定文件,并不会自动加载依赖程序集.Assmbly.Load无需后辍名
                
                //2、加载dll后,需要使用dll中某类.
                Type type=ass.GetType(“TypeName”);//用类型的命名空间和名称获得类型
                
                //3、需要实例化类型,才可以使用,参数可以人为的指定,也可以无参数,静态实例可以省略
                Object obj = Activator.CreateInstance(type,params[]);//利用指定的参数实例话类型
                
                //4、调用类型中的某个方法:
                需要首先得到此方法
                MethodInfo mi=type.GetMethod(“MehtodName”);//通过方法名称获得方法
                
                //5、然后对方法进行调用,多态性利用参数进行控制
                mi.Invoke(obj,params[]);//根据参数直线方法,返回值就是原方法的返回值



//获取程序目录
            //C#获取程序当前路径(进程的程序目录)的方法:
            System.AppDomain.CurrentDomain.BaseDirectory;	D:\1\bin\Debug\  (.exe文件所在的目录+"\")
            System.Windows.Forms.Application.ExecutablePath  //exe的完整路径
            
            
            //程序的启动目录,进程的程序目录!!!
            System.Environment.CurrentDirectory  //-获取和设置当前目录(该进程从中启动的目录)的完全限定目录,而不是进程的程序目录!!!
            System.Windows.Forms.Application.StartupPath //-获取启动了应用程序的可执行文件的路径 (同2)
            System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase //比2 多了个"\"  -获取和设置包括该应用程序的目录的名称
            
            
            //获取DLL的目录:
            Assembly myAssembly = Assembly.GetEntryAssembly();
            string path = myAssembly.Location;
            DirectoryInfo dr = new DirectoryInfo(path);
            path=dr.Parent; //当前目录的上一级目录
            
            
            System.Environment.CurrentDirectory;//(不好用,适应不了从浏览器打开的情况)            //例: c:\test
            Application.ExecutablePath;//(包括名称)            //例: c:\test\myapp.exe
            Application.StartupPath;//(不包括名称)            //例: c:\test
            //获取新的 Process 组件并将其与当前活动的进程关联的主模块的完整路径,包含文件名(进程名)。
            string str = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
            result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)
            //获取和设置当前目录(即该进程从中启动的目录)的完全限定路径。
            string str = System.Environment.CurrentDirectory;
            result: X:\xxx\xxx (.exe文件所在的目录)
            
            //获取和设置包含该应用程序的目录的名称。
            string str = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;// result: X:\xxx\xxx\ (.exe文件所在的目录+"\")
            //获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称。
            string str = System.Windows.Forms.Application.StartupPath;// result: X:\xxx\xxx (.exe文件所在的目录)
            //获取启动了应用程序的可执行文件的路径,包括可执行文件的名称。
            string str = System.Windows.Forms.Application.ExecutablePath;//  result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)
            //获取应用程序的当前工作目录(不可靠)。
            string str = System.IO.Directory.GetCurrentDirectory();//  result: X:\xxx\xxx (.exe文件所在的目录)
            
            0. 临时目录
                System.IO.Path.GetTempPath();      //  H:\Users\Administrator\AppData\Local\Temp\
            1. 收藏夹路径
                System.Environment.GetFolderPath(System.Environment.SpecialFolder.Favorites)
            2. 桌面路径
                Environment.GetFolderPath(System.Environment.SpecialFolder.DesktopDirectory) 
                Environment.GetFolderPath(Environment.SpecialFolder.Desktop)                //都返回C:/桌面 SpecialFolder.Desktop C:\桌面

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值