乱七八糟的知识
一:C#的类
1.文件(夹)类
1.创建或获取路径有误
Directory.GetCurrentDirectory(); //获取当前程序文件夹路径 Directory.CreateDirectory();//括号里面写路径,创建此路径及文件夹 File.Exists(); //括号里面写路径,判断是否有此路径,返回true或者false File.Create(); //括号里面写路径,创建文件 //示例 string path = Directory.GetCurrentDirectory() + "\\test"; //文件夹地址 if (!File.Exists(path)) //判断是否有当前文件夹 { Directory.CreateDirectory(path); //如果没有就创建一个文件夹 }2.获取某个文件的路径(弹出路径选择框)
OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "(*.et;*.xls;*.xlsx)|*.et;*.xls;*.xlsx|all|*.*"; //设定文件的类型 ofd.ShowDialog(); //弹出选择的文件路径 string filePath = ofd.FileName; //接受路径的变量3.保存文件的路径(弹出路径选择框)
SaveFileDialog sfd = new SaveFileDialog(); sfd.Filter = "(*.et;*.xls;*.xlsx)|*.et;*.xls;*.xlsx|all|*.*"; //设定文件显示类型 sfd.ShowDialog(); string savePath = sfd.FileName;//保存文件路径的变量2.Ini数据读写
IniAPI.INIWriteValue(地址, 键名称, 值名称, 值数据);//写入值(没有文件会自动生成) IniAPI.GetPrivateProfileString(键名称, 值名称, "", 地址);//获取某个值 IniAPI.INIGetAllSectionNames(地址);//获取所有的键名称 返回数组 IniAPI.INIGetAllItemKeys(地址,键名称);//获取所有的值名称 返回数组 IniAPI.INIGetAllItems(地址,键名称);//获取所有的值名称和值(值名称=值)返回数组 IniAPI.INIDeleteSection(地址,键名称);//删除键名称和对应的数据 IniAPI.INIEmptySection(地址,键名称);//只删除键名称对应的数据,不删除键名称 IniAPI.INIDeleteKey(地址,键名称,值名称);//删除值名称和对应的值二:WinForm
1.子窗口在主窗口中显示
1.将子窗口的FormBorderStyle属性设置为None
2.在主界面中创建一个Panel容器
3.代码显示
//实例化子窗口 IntegrationOne windowsOne = new IntegrationOne(); //设置属性 windowsOne.TopLevel = false; windowsOne.Dock = DockStyle.Fill; //清空其他显示(panel为控件名称) panel.Controls.Clear(); panel.Controls.Add(); windowsOne.show();2.ComboBox设置
//不可编辑 将ComboBox的DropDownStyle 属性设置为 DropDownList //默认选项 comboBox1.SelectedItem = comboBox1.Items[0];3.listBox代码
private void PrinMsg(string msg,bool bReceive=false)//传入一个字符串和一个bool(判断是向listBox输出还是向服务器端输出) { string time = DateTime.Now.ToString("HH:mm:ss");//时间 string receive = bReceive ? " <- " : " -> ";//bool string str = $"{time}:{receive}{msg}";//时间+判断想谁输出+字符 try { listBox1.BeginInvoke(new Action(() =>{if (listBox1.Items.Count > 60){listBox1.Items.Remove(0);} listBox1.Items.Add(str);//向listBox最后一行输出,判断超过60行清除第一行 //添加一个程序运行的状态 mfop.SaveLog(str);//添加一个FileOperate的本地文件,向本地文件写入数据 })); //listbox总是显示最后一行 listBox.TopIndex = listBox.item.Count -1; } catch (Exception ex) { //ex是捕获所有异常 mfop.SaveLog(ex.Message);//捕获到的异常写到本地文件中 }4.界面的控件调用
/*当界面2要调用界面1的某个控件 *界面1实例化界面2的时候,传入这个控件 *然后界面2先声明一个此控件,然后在public 界面2中(控件 kongjian) 然后在这里面 将获取到的控件赋值给*界面2中声明的控件 */ //调用另外一个界面的数据的时候这样实例化更好一点 SubInterface s1 = (SubInterface)this.Owner; //右键选择listbox的项 if (e.Button == MouseButtons.Right) { int currentIndex = listBox2.IndexFromPoint(e.Location); if (listBox2.SelectedItem != null && currentIndex != listBox2.SelectedIndex) { this.listBox2.SetSelected(listBox2.SelectedIndex, false); } this.listBox2.SetSelected(currentIndex, true); } //提示框确认按钮文本 //使用方法 MessageBoxEX.shou("文本内容",MessageBoxButtons.OKCancel, new string[] { "按钮1", "按钮2" });5.关闭所有线程
//当窗体关闭时发生的事件 FormClosing 关闭所有线程 System.Environment.Exit(0);6.WinForm程序打包(简洁版)
1.安装扩展
扩展程序 搜索 Microsoft Visual Studio Installer Projects
2.创建项目
在项目的解决方案中新建项目
3.开始打包
1.右键Application Folder-----Add-----文件
2.选择要打包的项目的bin--debug文件夹的所有文件
3.右键Application Folder----项目输出--主输出--确认
4.找到卸载程序 C:\Windows\System32\msiexec.exe 文件添加进文件
5.右键 msiexec.exe 选择 Create Shortcut to msiexec.exe
6.选择本项目的属性ProductCode 复制里面的内容
7.选择第五条生成的快捷文件Arguments属性 输入 /X +复制的内容(大写有空格)
8.可省略:右键项目属性,点击Prerequisites.选择框架
9.右键项目生成
三:Cog的类
1.CogSerializer类
//将本地的相机vpp文件赋给控件中的cogAcqFifoEditV21 CogAcqFifoTool macqfifo=CogSerializer.LoadObjectFromFile(xjpath)as CogAcqFifoTool; cogAcqFifoEditV21.Subject = macqfifo; //将本地的ToolBlock文件赋给控件中的Toolblock文件 CogToolBlock mtb=CogSerializer.LoadObjectFromFile(tbpath)as CogToolBlock; cogToolBlockEditV21.Subject=mtb; //将控件中的CogAcqFifoEditv21相机控件保存到本地 CogAcqFifoTool xj1 = cogAcqFifoEditV21.Subject; CogSerializer.SaveObjectToFile(xj1,path);//相机实例化和本地Vpp的地址 //将控件中的ToolBlock控件保存到本地 CogToolBlock mtb = cogToolBlockEditV21.Subject; CogSerializer.SaveObjectToFile(mtb,tbpath); //输出脚本中的数组 //先添加一个输出类型并改名为array //数组为arr1(输出数组的类型和数组要一致) //在写setXYTest的局域中写入 mToolBlock.Outputs["array"].Value = arr1;四:方法
1.Tcp通信的方法
Socket clientsocket;//客户端套接字 public void Setcom()//可以在窗口开启的时候调用此方法 { //提供协议 clientsocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); IPEndPoint iPEndPoint = new IPEndPoint(IPAddress.Parse(IP地址),端口号);//建立链接点 clientsocket.Connect(iPEndPoint);//链接服务器 //创建接收消息的异步操作 ThreadPool.QueueUserWorkItem(Receiv,clientsocket); } private void Receiv(object state) { Socket socket = (Socket)state;//设置套接字 while (true) { try { byte[]buffer=new byte[1024*1024*2];//设置传输数据的大小为2MB字节 int r=socket.Receive(buffer);//获取接受到的字节数组长度 if (r == 0) break;//没有接受到信息就退出 string msg=Encoding.Default.GetString(buffer,0,r);//转码接收到的消息 PrinMsg("接收到的消息:"+msg,true);//写一个listBox显示的方法 } } catch (Exception ex) { //进入异常 Thread.Sleep(3000);//每隔三秒连接一次 PEndPoint iPEndPoint = new IPEndPoint(IPAddress.Parse(IP地址),端口号号);//建立链接点 clientsocket.Connect(iPEndPoint);//链接服务器 } }2.winform图片的使用方法
pictureBox1.Image.Save(path);//将图片保存到本地 pictureBox2.Image= Image.FromFile(path);//将本地图片显示出来3.判断点击
DialogResult bc = MessageBox.Show("确认或取消", "", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);//弹出提示框 if(bc==DialogResult.OK)//判断是否点击了确认 { MessageBox.Show("保存成功"); } else//点击了取消 { MessageBox.Show("取消了操作"); } OpenFileDialog file = new OpenFileDialog();//弹出框 file.ShowDialog();//选择文件 string url = file.FileName;//文件路径五:视觉方向
1.正常的方向
在视觉中的方向一般是这种的,由-180 至 180
2.360度的方向
如果要设置为0-360的话,可以先判断是否小于零,然后加360即可,即为
例如
double angle = -18;//假设有一个角度为负18都 if(angle<0) //如果小于0就代表为负角度 { angle=angle+360;//将角度+360将为342度 }3.Visionpro将弧度转换为角度的公式
弧度*(180/Math.PI);
