// 读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:\桌面