Commit a4f817cd LN

增加亮灯处理。侧挡气缸禁用时不显示。

1 个父辈 2f6820cb
...@@ -104,6 +104,8 @@ ...@@ -104,6 +104,8 @@
<Compile Include="deviceLibrary\IO\IOBase.cs" /> <Compile Include="deviceLibrary\IO\IOBase.cs" />
<Compile Include="deviceLibrary\IO\NanjingSDotIO.cs" /> <Compile Include="deviceLibrary\IO\NanjingSDotIO.cs" />
<Compile Include="deviceLibrary\IO\NiRenIO.cs" /> <Compile Include="deviceLibrary\IO\NiRenIO.cs" />
<Compile Include="deviceLibrary\ledLabel\LedLabelController.cs" />
<Compile Include="deviceLibrary\ledLabel\LabelInfo.cs" />
<Compile Include="manager\ProjectorProcess.cs" /> <Compile Include="manager\ProjectorProcess.cs" />
<Compile Include="manager\LedManager.cs" /> <Compile Include="manager\LedManager.cs" />
<Compile Include="manager\LineWidthManager.cs" /> <Compile Include="manager\LineWidthManager.cs" />
...@@ -167,7 +169,9 @@ ...@@ -167,7 +169,9 @@
</None> </None>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Content Include="config\Positions.csv" /> <Content Include="config\Positions.csv">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="config\BOM-US.csv"> <Content Include="config\BOM-US.csv">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content> </Content>
......
...@@ -54,8 +54,11 @@ namespace TSA_V.DeviceLibrary ...@@ -54,8 +54,11 @@ namespace TSA_V.DeviceLibrary
AddDI(new ConfigIO(ConfigItemType.DI, KNDIP, slaveId, (ushort)(IOBase.instance.DIStartAddress + 7), "LineOutCheck", "X08_线体出口检测")); AddDI(new ConfigIO(ConfigItemType.DI, KNDIP, slaveId, (ushort)(IOBase.instance.DIStartAddress + 7), "LineOutCheck", "X08_线体出口检测"));
AddDI(new ConfigIO(ConfigItemType.DI, KNDIP, slaveId, (ushort)(IOBase.instance.DIStartAddress + 8), "StopCylinder_Up", "X09_挡停气缸上升端")); AddDI(new ConfigIO(ConfigItemType.DI, KNDIP, slaveId, (ushort)(IOBase.instance.DIStartAddress + 8), "StopCylinder_Up", "X09_挡停气缸上升端"));
AddDI(new ConfigIO(ConfigItemType.DI, KNDIP, slaveId, (ushort)(IOBase.instance.DIStartAddress + 9), "StopCylinder_Down", "X10_挡停气缸下降端")); AddDI(new ConfigIO(ConfigItemType.DI, KNDIP, slaveId, (ushort)(IOBase.instance.DIStartAddress + 9), "StopCylinder_Down", "X10_挡停气缸下降端"));
AddDI(new ConfigIO(ConfigItemType.DI, KNDIP, slaveId, (ushort)(IOBase.instance.DIStartAddress + 10), "SideCylinder_Forward", "X11_侧挡气缸前进端")); if (!TSAVBean.DisableSideCylinder)
AddDI(new ConfigIO(ConfigItemType.DI, KNDIP, slaveId, (ushort)(IOBase.instance.DIStartAddress + 11), "SideCylinder_Back", "X12_侧挡气缸后退端")); {
AddDI(new ConfigIO(ConfigItemType.DI, KNDIP, slaveId, (ushort)(IOBase.instance.DIStartAddress + 10), "SideCylinder_Forward", "X11_侧挡气缸前进端"));
AddDI(new ConfigIO(ConfigItemType.DI, KNDIP, slaveId, (ushort)(IOBase.instance.DIStartAddress + 11), "SideCylinder_Back", "X12_侧挡气缸后退端"));
}
if (!TSAVBean.DisableBottomCylinder) if (!TSAVBean.DisableBottomCylinder)
{ {
AddDI(new ConfigIO(ConfigItemType.DI, KNDIP, slaveId, (ushort)(IOBase.instance.DIStartAddress + 12), "BottomCylinder_Down1", "X13_底部定位气缸1下降端")); AddDI(new ConfigIO(ConfigItemType.DI, KNDIP, slaveId, (ushort)(IOBase.instance.DIStartAddress + 12), "BottomCylinder_Down1", "X13_底部定位气缸1下降端"));
...@@ -67,8 +70,11 @@ namespace TSA_V.DeviceLibrary ...@@ -67,8 +70,11 @@ namespace TSA_V.DeviceLibrary
AddDO(new ConfigIO(ConfigItemType.DO, KNDIP, slaveId, (ushort)(IOBase.instance.DoStartAddress + 3), "SMEMA_Down", "Y04_SMEMA后机送料请求")); AddDO(new ConfigIO(ConfigItemType.DO, KNDIP, slaveId, (ushort)(IOBase.instance.DoStartAddress + 3), "SMEMA_Down", "Y04_SMEMA后机送料请求"));
AddDO(new ConfigIO(ConfigItemType.DO, KNDIP, slaveId, (ushort)(IOBase.instance.DoStartAddress + 4), "StopCylinder_Up", "Y05_挡停气缸上升SOL")); AddDO(new ConfigIO(ConfigItemType.DO, KNDIP, slaveId, (ushort)(IOBase.instance.DoStartAddress + 4), "StopCylinder_Up", "Y05_挡停气缸上升SOL"));
AddDO(new ConfigIO(ConfigItemType.DO, KNDIP, slaveId, (ushort)(IOBase.instance.DoStartAddress + 5), "StopCylinder_Down", "Y06_挡停气缸下降SOL")); AddDO(new ConfigIO(ConfigItemType.DO, KNDIP, slaveId, (ushort)(IOBase.instance.DoStartAddress + 5), "StopCylinder_Down", "Y06_挡停气缸下降SOL"));
AddDO(new ConfigIO(ConfigItemType.DO, KNDIP, slaveId, (ushort)(IOBase.instance.DoStartAddress + 6), "SideCylinder_Forward", "Y07_侧挡气缸前进SOL")); if (!TSAVBean.DisableSideCylinder)
AddDO(new ConfigIO(ConfigItemType.DO, KNDIP, slaveId, (ushort)(IOBase.instance.DoStartAddress + 7), "SideCylinder_Back", "Y08_侧挡气缸后退SOL")); {
AddDO(new ConfigIO(ConfigItemType.DO, KNDIP, slaveId, (ushort)(IOBase.instance.DoStartAddress + 6), "SideCylinder_Forward", "Y07_侧挡气缸前进SOL"));
AddDO(new ConfigIO(ConfigItemType.DO, KNDIP, slaveId, (ushort)(IOBase.instance.DoStartAddress + 7), "SideCylinder_Back", "Y08_侧挡气缸后退SOL"));
}
if (!TSAVBean.DisableBottomCylinder) if (!TSAVBean.DisableBottomCylinder)
{ {
AddDO(new ConfigIO(ConfigItemType.DO, KNDIP, slaveId, (ushort)(IOBase.instance.DoStartAddress + 8), "BottomCylinder_Up", "Y09_底部定位气缸上升SOL")); AddDO(new ConfigIO(ConfigItemType.DO, KNDIP, slaveId, (ushort)(IOBase.instance.DoStartAddress + 8), "BottomCylinder_Up", "Y09_底部定位气缸上升SOL"));
......
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TSA_V.DeviceLibrary
{
public class LabelInfo
{
//public string lblPos="位置:";
//public string lblNum = "库存数量:";
//public string lblPn = "物料编码:";
//public string lblDes = "描述:";
//public string lblNotes = "注意事项:";
public LabelInfo() { }
public LabelInfo(string pos, string num, string pn, string des, string notes, string ip, string mac, bool led)
{
this.pos = pos;
this.num = num;
this.pn = pn;
this.des = des;
this.notes = notes;
this.ip = ip;
this.mac = mac;
this.openLed = led;
}
public string ip="";
public string mac="";
public string pos="";
public string num = "";
public string pn = "";
public string des = "";
public string notes = "";
public bool openLed;
public Dictionary<string,object> toMap()
{
Dictionary<string, object> map = new Dictionary<string, object>();
map.Add("lblPos", ResourceControl.GetString("Label_lblPos", "位置:"));
map.Add("lblNum", ResourceControl.GetString("Label_lblNum", "库存数量:"));
map.Add("lblPn", ResourceControl.GetString("Label_lblPn", "物料编码:"));
map.Add("lblDes", ResourceControl.GetString("Label_lblDes", "描述:"));
map.Add("lblNotes", ResourceControl.GetString("Label_lblNotes", "注意事项:"));
map.Add("pos", pos);
map.Add("num", num);
map.Add("pn", pn);
map.Add("des", des);
map.Add("notes", notes);
map.Add("styleid", 47);
string ledrgb = openLed ? "ff00" : "0";
map.Add("ledrgb", ledrgb);
map.Add(mac, mac);
return map;
}
// {
// "mac":"99.96.19.64",
// "mappingtype":868,
// "styleid":47,
// "lblPos":"位置:",
// "pos":"1_8",
// "lblNum":"库位数量:",
// "lblPn":"物料编码:",
// "lblDes":"描述:",
// "lblNotes":"注意事项:",
// "num":"234",
// "pn":"R218",
// "des":"描述内容",
// "notes":"注意事项内容",
// "边框":"",
// "边框1":"",
// "边框2":"",
// "边框3":"",
// "边框4":"",
// "边框5":"",
// "边框6":"",
// "边框7":"",
// "边框8":"",
// "边框9":"",
// "ledrgb":"ff00",
// "ledstate":"0",
// "outtime":"0"
//}
//[{"mac":"99.96.19.64","mappingtype":868,"styleid":47,"lblPos":"位置:","pos":"1_8","lblNum":"库位数量:","lblPn":"物料编码:","lblDes":"描述:","lblNotes":"注意事项:","num":"234","pn":"R218","des":"描述内容","notes":"注意事项内容","边框":"","边框1":"","边框2":"","边框3":"","边框4":"","边框5":"","边框6":"","边框7":"","边框8":"","边框9":"","ledrgb":"ff00","ledstate":"0","outtime":"0"}]
}
}
using System.Collections.Generic;
using System.Net.Http;
using TSA_V.Common;
using TSA_V.LoadCSVLibrary;
namespace TSA_V.DeviceLibrary
{
public class LedLabelController
{
public static void OpenAll()
{
OpenOrCloseAll(true);
}
public static void CloseAll()
{
OpenOrCloseAll(false);
}
private static void OpenOrCloseAll(bool open)
{
List<TSAVPosition> positions = CSVPositionReader<TSAVPosition>.getPositionList();
List<string> macs = new List<string>();
List<bool> ledvs = new List<bool>();
string ip = "";
foreach (var pos in positions)
{
if (pos.PositionType.Equals(2))
{
ip = pos.DeviceIP;
macs.Add(pos.Leds);
ledvs.Add(open);
}
}
if (macs.Count > 0)
{
string url = $"http://{ip}/wms/associate/lightTagsLed";
string json = JsonHelper.SerializeObject(getLedMaps(macs, ledvs));
Post(url, json);
}
}
public static LabelInfo GetLabel(TSAVPosition position, ComponetInfo com, bool opendLed = false)
{
if (com == null)
{
com = new ComponetInfo();
}
if (position == null)
{
position = new TSAVPosition();
}
if (!position.PositionType.Equals(2))
{
return new LabelInfo();
}
LabelInfo label = new LabelInfo(position.PositionName, com.ComCount, com.PN, com.ComponentDes, com.Notes, position.DeviceIP, position.Leds, opendLed);
return label;
}
public static void OpenLed(string ip, string mac)
{
controlLed(ip, mac, true);
}
public static void CloseLed(string ip, string mac)
{
controlLed(ip, mac, false);
}
private static List<Dictionary<string, object>> getLedMaps(List<string> mac, List<bool> ledrgb)
{
List<Dictionary<string, object>> list = new List<Dictionary<string, object>>();
for (int i = 0; i < mac.Count; i++)
{
if (ledrgb.Count > i)
{
string rgb = ledrgb[i] ? "ff00" : "0";
list.Add(getLedMap(mac[i], rgb));
}
}
return list;
}
private static Dictionary<string, object> getLedMap(string mac, string ledrgb)
{
Dictionary<string, object> keyValuePairss = new Dictionary<string, object>{
{ "mac", mac },//标签地址
{ "lednum", 255 },
{ "timeout", 0 },
{ "ledrgb", ledrgb },
{ "ledmode", 0 },
{ "reserve", "reserve" },
{ "cmdtoken", "Inve123ntec" }};
return keyValuePairss;
}
private static void controlLed(string ip, string mac, bool openLed)
{
if (ip == "")
{
return;
}
string ledrgb = openLed ? "ff00" : "0";
string url = $"http://{ip}/wms/associate/lightTagsLed";
Dictionary<string, object> keyValuePairss = getLedMap(mac, ledrgb);
string json = JsonHelper.SerializeObject(keyValuePairss);
string value = $"[{json}]";
Post(url, value);
}
public static void UpdateScreen(LabelInfo label)
{
if (label.ip == "")
{
return;
}
string url = $"http://{label.ip}/wms/associate/updateScreen";
Dictionary<string, object> dic = new Dictionary<string, object>();
dic.Add("mac", label.mac);
dic.Add("mappingtype", "868");
dic.Add("styleid", 47);
dic.Add("ledrgb", "0");
dic.Add("ledstate", "0");
dic.Add("outtime", "0");
Dictionary<string, object> lmap = label.toMap();
foreach (string key in lmap.Keys)
{
if (dic.ContainsKey(key))
{
dic[key] = lmap[key];
}
else
{
dic.Add(key, lmap[key]);
}
}
string json = JsonHelper.SerializeObject(dic);
string value = $"[{json}]";
Post(url, value);
}
public static async void Post(string url, string json)
{
using (var client = new HttpClient())
{
using (var request = new HttpRequestMessage(HttpMethod.Post, url))
{
var contents = new StringContent($"{json}", null, "application/json");
request.Content = contents;
using (HttpResponseMessage response = await client.SendAsync(request) )
{
if (response.IsSuccessStatusCode)
{
string jsonResponse = response.Content.ReadAsStringAsync().Result;
LogUtil.info($"电子屏 {url} 发送{json} 结果 {response.IsSuccessStatusCode}: " + jsonResponse);
}
else
{
string jsonResponse = response.Content.ReadAsStringAsync().Result;
LogUtil.info($"电子屏{url} 发送{json} 结果 {response.IsSuccessStatusCode}: " + jsonResponse);
}
}
}
}
}
// {
// "mac":"99.96.19.64",
// "mappingtype":868,
// "styleid":47,
// "lblPos":"位置:",
// "pos":"1_8",
// "lblNum":"库位数量:",
// "lblPn":"物料编码:",
// "lblDes":"描述:",
// "lblNotes":"注意事项:",
// "num":"234",
// "pn":"R218",
// "des":"描述内容",
// "notes":"注意事项内容",
// "ledrgb":"ff00",
// "ledstate":"0",
// "outtime":"0"
//}
//private static void controlLed(string ip, string mac, bool openLed)
//{
// string ledrgb = openLed ? "ff00" : "0";
// using (var client = new HttpClient())
// {
// string url = $"http://{ip}/wms/associate/lightTagsLed";
// using (var requests = new HttpRequestMessage(HttpMethod.Post, url))
// {
// Dictionary<string, object> keyValuePairss = getLedMap(mac, ledrgb);
// string json = JsonHelper.SerializeObject(keyValuePairss);
// var contents = new StringContent($"[{json}]", null, "application/json");
// LogUtil.info($"电子屏 {ip}-{mac} : {(openLed ? "开灯" : "关灯")} url:{url}, 发送内容:{json}");
// requests.Content = contents;
// using (HttpResponseMessage response = client.SendAsync(requests).Result)
// {
// if (response.IsSuccessStatusCode)
// {
// string jsonResponse = response.Content.ReadAsStringAsync().Result;
// LogUtil.info($"电子屏 {ip}-{mac} : {(openLed ? "开灯" : "关灯")} 结果: " + jsonResponse);
// }
// else
// {
// LogUtil.info($"电子屏 {ip}-{mac} : {(openLed ? "开灯" : "关灯")} 结果: " + response.RequestMessage.ToString());
// }
// }
// requests.Dispose();
// }
// }
//}
//public static void UpdateScreen(LabelInfo label)
//{
// string ledrgb = label.openLed ? "ff00" : "0";
// using (var client = new HttpClient())
// {
// string url = $"http://{label.ip}/wms/associate/updateScreen";
// using (var request = new HttpRequestMessage(HttpMethod.Post, url))
// {
// Dictionary<string, object> dic = new Dictionary<string, object>();
// dic.Add("mac", label.mac);
// dic.Add("mappingtype", "868");
// dic.Add("styleid", 47);
// dic.Add("ledrgb", "0");
// dic.Add("ledstate", "0");
// dic.Add("outtime", "0");
// Dictionary<string, object> lmap = label.toMap();
// foreach (string key in lmap.Keys)
// {
// if (dic.ContainsKey(key))
// {
// dic[key] = lmap[key];
// }
// else
// {
// dic.Add(key, lmap[key]);
// }
// }
// string json = JsonHelper.SerializeObject(dic);
// var contents = new StringContent($"[{json}]", null, "application/json");
// LogUtil.info($"电子屏 {label.ip}-{label.mac} : 更改屏幕内容 url:{url}, 发送内容:{json}");
// request.Content = contents;
// using (HttpResponseMessage response = client.SendAsync(request).Result)
// {
// if (response.IsSuccessStatusCode)
// {
// string jsonResponse = response.Content.ReadAsStringAsync().Result;
// LogUtil.info($"电子屏 {label.ip}-{label.mac} : 更改屏幕结果: " + jsonResponse);
// }
// else
// {
// LogUtil.info($"电子屏 {label.ip}-{label.mac} : 更改屏幕失败: " + response.RequestMessage.ToString());
// }
// }
// }
// }
//}
}
}
using ExcelDataReader;
using HalconDotNet;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using TSA_V.Common;
using TSA_V.LoadCSVLibrary;
namespace TSA_V.DeviceLibrary.manager
{
public class ScanRequestLabel
{
private static Dictionary<string,string> lastPirs = new Dictionary<string,string>();
/// <summary>
/// 开灯、记录地址信息
/// </summary>
/// <param name="position"></param>
/// <param name="count"></param>
/// <param name="name"></param>
/// <param name="ComponentDes"></param>
/// <param name="dic"></param>
public static void RequestPost(TSAVPosition position,string count,string name,string ComponentDes,out Dictionary<string, string> dic)
{
Dictionary<string, string> pairs = new Dictionary<string, string>();
try
{
#region
////不为空时,关闭上一个指示灯
//if (pairs.Count>=3)
//{
// DataModel data = new DataModel()
// {
// ip = pairs["Ip"],
// mac = pairs["Mac"],
// PNum = pairs["PNum"],
// count=count,
// name= pairs["Name"],
// ComponentDes = pairs["ComponentDes"]
// };
// //关灯操作
// LogUtil.info($"电子屏关灯:{data.ip},{data.mac},{false},上一个电子屏信息:{data.mac}");
// lightTagsLed(data.ip, data.mac, false);
// UpdateQty(data);
// pairs.Clear();
//}
#endregion
if (!string.IsNullOrWhiteSpace(position.DeviceIP))
{
//开灯
LogUtil.info($"电子屏开灯:{position.PositionNum} {position.DeviceIP},{position.Leds},{true}");
lightTagsLed(position.DeviceIP, position.Leds, true);
pairs.Add("Ip", position.DeviceIP);
pairs.Add("Mac", position.Leds);
pairs.Add("PNum", position.PositionNum);//库位编号
pairs.Add("Count",count);
pairs.Add("ComponentDes", ComponentDes);
pairs.Add("Name", name);
LogUtil.info($"{ComponentDes};{name};");
}
else
{
pairs.Clear();
}
}
catch (Exception)
{
}
dic = pairs;
lastPirs = pairs;
}
/// <summary>
/// 关灯
/// </summary>
/// <param name="pairs"></param>
public static void Turnoffthelights(Dictionary<string,string> pairs)
{
DataModel data = new DataModel()
{
ip = pairs["Ip"],
mac = pairs["Mac"],
PNum = pairs["PNum"],
count = pairs["Count"],
name = pairs["Name"],
ComponentDes = pairs["ComponentDes"]
};
//关灯操作
LogUtil.info($"电子屏关灯:{data.ip},{data.mac},{false},上一个电子屏信息:{data.mac}");
lightTagsLed(data.ip, data.mac, false);
UpdateQty(data);
pairs.Clear();
}
/// <summary>
/// 请求标签,关灯、开灯
/// </summary>
/// <param name="ip"></param>
/// <param name="mac">标签地址</param>
/// <param name="isled">true=亮灯</param>
public static void lightTagsLed(string ip,string mac,bool isled)
{
string ledrgb=isled?"ff00":"0";
var client = new HttpClient();
var requests = new HttpRequestMessage(HttpMethod.Post, $"http://{ip}/wms/associate/lightTagsLed");
Dictionary<string, object> keyValuePairss = new Dictionary<string, object>{
{ "mac", mac },//标签地址
{ "lednum", 255 },
{ "timeout", 0 },
{ "ledrgb", ledrgb },
{ "ledmode", 0 },
{ "reserve", "reserve" },
{ "cmdtoken", "Inve123ntec" }};
string json= JsonHelper.SerializeObject(keyValuePairss);
var contents = new StringContent($"[{json}]", null, "application/json");
requests.Content = contents;
client.SendAsync(requests);
}
public static void Switchlanguage(int idenx)
{
if (idenx>1)
{
return;
}
//查询出所有的mac数据
var list=CSVPositionReader<TSAVPosition>.getPositionList();
var entity= list.Where(a => a.PositionType == 2).ToList();
if (entity == null)
return;
List<string> strings=new List<string>();
foreach (var item in entity)
{
var dic = dictionry(idenx);
dic["mac"] = item.Leds.ToString();
dic["lot"] = item.PositionNum.ToString();
dic["desc"] = null;
dic["PN"] = null;
dic["QTY"] = null;
string str=JsonHelper.SerializeObject(dic);
dic.Clear();
strings.Add(str);
}
string jsons = "";
foreach (var item in strings)
{
jsons += item + ",";
}
var client = new HttpClient();
var requests = new HttpRequestMessage(HttpMethod.Post, $"http://{entity[0].DeviceIP}/wms/associate/updateScreen");
string json = JsonHelper.SerializeObject(strings);
string aaa = $"[{jsons.Substring(0,jsons.Length - 1)}]";
var contents = new StringContent($"[{jsons.Substring(0,jsons.Length-1)}]", null, "application/json");
requests.Content = contents;
client.SendAsync(requests);
}
/// <summary>
/// 修改样式模板
/// </summary>
/// <param name="ip">ip地址</param>
/// <param name="mac">mac地址</param>
/// <param name="count">物料数量</param>
/// <param name="pnname">物料名称</param>
/// <param name="PN">库位编号位置名称</param>
public static void UpdateQty(DataModel data)
{
var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Post, $"http://{data.ip}/wms/associate/updateScreen");
Dictionary<string, object> dic = new Dictionary<string, object>();
dic.Add("Count", "Qty:");
dic.Add("Describe", "Desc:");
dic.Add("PN", data.name);
dic.Add("PartNumber", "Name:");
dic.Add("QRcode", "123456");
dic.Add("QTY", $"{int.Parse(data.count)-1}");
dic.Add("Striptype", "----------------------------------------");
dic.Add("desc", data.ComponentDes);
dic.Add("ledrgb", "0");
dic.Add("ledstate", "0");
dic.Add("location", "Lot.:");
dic.Add("logo", "neotel12");
dic.Add("logoname", "NEO LABEL");
dic.Add("lot", data.PNum);
dic.Add("mac", data.mac);
dic.Add("mappingtype",538);
dic.Add("outtime", "0");
dic.Add("styleid", 53);
string json = JsonHelper.SerializeObject(dic);
var contents = new StringContent($"[{json}]", null, "application/json");
request.Content = contents;
client.SendAsync(request);
}
public static Dictionary<string, object> dictionry(int idenx)
{
Dictionary<string, object> dic = new Dictionary<string, object>();
//中文请求
if (idenx == 0)
{
dic.Add("Count", "数量:");
dic.Add("Describe", "物料描述:");
dic.Add("PartNumber", "名称:");
dic.Add("QRcode", "123456");
dic.Add("Striptype", "----------------------------------------");
dic.Add("ledrgb", "0");
dic.Add("ledstate", "0");
dic.Add("location", "库位编号:");
dic.Add("logo", "neotel12");
dic.Add("logoname", "NEO LABEL");
dic.Add("mappingtype", 538);
dic.Add("outtime", "0");
dic.Add("styleid", 53);
dic.Add("mac", null);
dic.Add("PN", null);
dic.Add("QTY", $"{null}");
dic.Add("lot", null);
dic.Add("desc", null);
}
else if (idenx == 1)//英文请求
{
dic.Add("Count", "Qty:");
dic.Add("Describe", "Desc:");
dic.Add("PartNumber", "Name:");
dic.Add("QRcode", "123456");
dic.Add("Striptype", "----------------------------------------");
dic.Add("ledrgb", "0");
dic.Add("ledstate", "0");
dic.Add("location", "Lot.:");
dic.Add("logo", "neotel12");
dic.Add("logoname", "NEO LABEL");
dic.Add("mappingtype", 538);
dic.Add("outtime", "0");
dic.Add("styleid", 53);
dic.Add("mac", null);
dic.Add("PN", null);
dic.Add("QTY", $"{null}");
dic.Add("lot", null);
dic.Add("desc", null);
}
return dic;
}
//public static DataTable GetData(string filePath)
//{
// // 设置文件路径和工作表名称
// //string filePath = "path/to/your/excel/file.xlsx";
// string worksheetName = "Sheet1";
// // 创建ExcelDataReader对象并打开工作簿
// using (var reader = ExcelReaderFactory.CreateReader(filePath))
// {
// reader.IsFirstRowAsColumnNames = true; // 将第一行作为列名
// var result = reader.AsDataSet(new ExcelDataSetConfiguration()
// {
// ConfigureDataTable = (_) => new ExcelDataTableConfiguration()
// {
// UseHeaderRow = true // 使用标题行作为列名
// }
// });
// // 获取指定工作表的数据表
// DataTable dt = result.Tables[worksheetName];
// // 在此处使用数据表进行处理
// }
//}
public class DataModel
{
/// <summary>
/// ip地址
/// </summary>
public string ip { get; set; }
/// <summary>
/// mac地址
/// </summary>
public string mac { get; set; }
/// <summary>
/// 记录上一个库位编号
/// </summary>
public string PNum { get; set; }
/// <summary>
/// 元器件数量
/// </summary>
public string count { get; set; }
/// <summary>
/// 元器件名称
/// </summary>
public string name { get; set; }
/// <summary>
/// 元器件描述
/// </summary>
public string ComponentDes { get; set; }
}
}
}
...@@ -929,6 +929,8 @@ namespace TSA_V.DeviceLibrary ...@@ -929,6 +929,8 @@ namespace TSA_V.DeviceLibrary
} }
} }
} }
LedLabelController.CloseAll();
} }
private static void CheckWorkWait() private static void CheckWorkWait()
{ {
......
...@@ -4,8 +4,7 @@ using System.Collections.Generic; ...@@ -4,8 +4,7 @@ using System.Collections.Generic;
using System.Drawing; using System.Drawing;
using System.Linq; using System.Linq;
using System.Threading; using System.Threading;
using TSA_V.Common; using TSA_V.Common;
using TSA_V.DeviceLibrary.manager;
using TSA_V.LoadCSVLibrary; using TSA_V.LoadCSVLibrary;
namespace TSA_V.DeviceLibrary namespace TSA_V.DeviceLibrary
...@@ -33,6 +32,7 @@ namespace TSA_V.DeviceLibrary ...@@ -33,6 +32,7 @@ namespace TSA_V.DeviceLibrary
public DateTime endWorkTime = DateTime.Now; public DateTime endWorkTime = DateTime.Now;
public DateTime LastSetpTime = DateTime.Now; public DateTime LastSetpTime = DateTime.Now;
public uint PreNodeId = 0; public uint PreNodeId = 0;
public LabelInfo PreLabel = null ;
public List<SMTPointInfo> needWorkSmtList = new List<SMTPointInfo>(); public List<SMTPointInfo> needWorkSmtList = new List<SMTPointInfo>();
//开始工作后共工作了几块电路板`````` //开始工作后共工作了几块电路板``````
public int BoardCount = 0; public int BoardCount = 0;
...@@ -291,13 +291,17 @@ namespace TSA_V.DeviceLibrary ...@@ -291,13 +291,17 @@ namespace TSA_V.DeviceLibrary
} }
public void MoveToBag(TSAVPosition position) public void MoveToBag(TSAVPosition position)
{ {
Dictionary<string,string> pairs = new Dictionary<string,string>(); //Dictionary<string,string> pairs = new Dictionary<string,string>();
if (pairs.Count!=0) //if (pairs.Count!=0)
//{
// //关灯
// LogUtil.info($"{pairs.ToString()}");
// ScanRequestLabel.Turnoffthelights(pairs);
// pairs.Clear();
//}
if (PreLabel != null)
{ {
//关灯 LedLabelController.CloseLed(PreLabel.ip, PreLabel.mac);
LogUtil.info($"{pairs.ToString()}");
ScanRequestLabel.Turnoffthelights(pairs);
pairs.Clear();
} }
//LedManager.LedOFFALL(); //LedManager.LedOFFALL();
if (position.PositionType.Equals(1)) if (position.PositionType.Equals(1))
...@@ -326,16 +330,21 @@ namespace TSA_V.DeviceLibrary ...@@ -326,16 +330,21 @@ namespace TSA_V.DeviceLibrary
{ {
var smtPoint=TSAVBean.Work.currPoint; var smtPoint=TSAVBean.Work.currPoint;
ComponetInfo com = CSVBomManager.GetCom(BoardManager.CurrBoard.bomName, smtPoint); ComponetInfo com = CSVBomManager.GetCom(BoardManager.CurrBoard.bomName, smtPoint);
string count=null; LabelInfo label = LedLabelController.GetLabel(position, com, true);
string pnname = null; LedLabelController.OpenLed(label.ip, label.mac);
string ComponentDes=null; LedLabelController.UpdateScreen(label);
if (com!=null) PreLabel = label;
{ //string count=null;
count = com.ComCount.ToString(); //string pnname = null;
pnname=com.PN.ToString(); //string ComponentDes=null;
ComponentDes=com.ComponentDes.ToString(); //if (com!=null)
} //{
ScanRequestLabel.RequestPost(position, count, pnname, ComponentDes ,out pairs); // count = com.ComCount.ToString();
// pnname=com.PN.ToString();
// ComponentDes=com.ComponentDes.ToString();
//}
//ScanRequestLabel.RequestPost(position, count, pnname, ComponentDes ,out pairs);
} }
#endregion #endregion
else else
......
...@@ -61,10 +61,9 @@ ...@@ -61,10 +61,9 @@
// //
this.lblMoveStr.Dock = System.Windows.Forms.DockStyle.Fill; this.lblMoveStr.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblMoveStr.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.lblMoveStr.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.lblMoveStr.Location = new System.Drawing.Point(542, 276); this.lblMoveStr.Location = new System.Drawing.Point(406, 219);
this.lblMoveStr.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblMoveStr.Name = "lblMoveStr"; this.lblMoveStr.Name = "lblMoveStr";
this.lblMoveStr.Size = new System.Drawing.Size(173, 92); this.lblMoveStr.Size = new System.Drawing.Size(130, 73);
this.lblMoveStr.TabIndex = 294; this.lblMoveStr.TabIndex = 294;
this.lblMoveStr.Text = "移动中"; this.lblMoveStr.Text = "移动中";
this.lblMoveStr.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; this.lblMoveStr.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
...@@ -73,10 +72,9 @@ ...@@ -73,10 +72,9 @@
// //
this.lblLeftInfo.AutoSize = true; this.lblLeftInfo.AutoSize = true;
this.lblLeftInfo.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.lblLeftInfo.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.lblLeftInfo.Location = new System.Drawing.Point(301, 546); this.lblLeftInfo.Location = new System.Drawing.Point(226, 437);
this.lblLeftInfo.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblLeftInfo.Name = "lblLeftInfo"; this.lblLeftInfo.Name = "lblLeftInfo";
this.lblLeftInfo.Size = new System.Drawing.Size(54, 20); this.lblLeftInfo.Size = new System.Drawing.Size(44, 17);
this.lblLeftInfo.TabIndex = 293; this.lblLeftInfo.TabIndex = 293;
this.lblLeftInfo.Text = "编号:"; this.lblLeftInfo.Text = "编号:";
// //
...@@ -84,10 +82,9 @@ ...@@ -84,10 +82,9 @@
// //
this.lblEndInfo.AutoSize = true; this.lblEndInfo.AutoSize = true;
this.lblEndInfo.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.lblEndInfo.Font = new System.Drawing.Font("微软雅黑", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.lblEndInfo.Location = new System.Drawing.Point(111, 546); this.lblEndInfo.Location = new System.Drawing.Point(83, 437);
this.lblEndInfo.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblEndInfo.Name = "lblEndInfo"; this.lblEndInfo.Name = "lblEndInfo";
this.lblEndInfo.Size = new System.Drawing.Size(54, 20); this.lblEndInfo.Size = new System.Drawing.Size(44, 17);
this.lblEndInfo.TabIndex = 292; this.lblEndInfo.TabIndex = 292;
this.lblEndInfo.Text = "编号:"; this.lblEndInfo.Text = "编号:";
// //
...@@ -95,10 +92,9 @@ ...@@ -95,10 +92,9 @@
// //
this.btnSaveCount.Dock = System.Windows.Forms.DockStyle.Fill; this.btnSaveCount.Dock = System.Windows.Forms.DockStyle.Fill;
this.btnSaveCount.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.btnSaveCount.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnSaveCount.Location = new System.Drawing.Point(542, 368); this.btnSaveCount.Location = new System.Drawing.Point(406, 292);
this.btnSaveCount.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.btnSaveCount.Name = "btnSaveCount"; this.btnSaveCount.Name = "btnSaveCount";
this.btnSaveCount.Size = new System.Drawing.Size(173, 38); this.btnSaveCount.Size = new System.Drawing.Size(130, 33);
this.btnSaveCount.TabIndex = 291; this.btnSaveCount.TabIndex = 291;
this.btnSaveCount.TabStop = true; this.btnSaveCount.TabStop = true;
this.btnSaveCount.Text = "保存数量"; this.btnSaveCount.Text = "保存数量";
...@@ -110,10 +106,9 @@ ...@@ -110,10 +106,9 @@
this.label4.Dock = System.Windows.Forms.DockStyle.Fill; this.label4.Dock = System.Windows.Forms.DockStyle.Fill;
this.label4.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.label4.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label4.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; this.label4.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
this.label4.Location = new System.Drawing.Point(4, 92); this.label4.Location = new System.Drawing.Point(3, 73);
this.label4.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label4.Name = "label4"; this.label4.Name = "label4";
this.label4.Size = new System.Drawing.Size(171, 92); this.label4.Size = new System.Drawing.Size(128, 73);
this.label4.TabIndex = 289; this.label4.TabIndex = 289;
this.label4.Text = "位号:"; this.label4.Text = "位号:";
this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleRight; this.label4.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
...@@ -122,10 +117,9 @@ ...@@ -122,10 +117,9 @@
// //
this.btnCancel.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.btnCancel.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnCancel.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.btnCancel.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnCancel.Location = new System.Drawing.Point(472, 470); this.btnCancel.Location = new System.Drawing.Point(354, 376);
this.btnCancel.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.btnCancel.Name = "btnCancel"; this.btnCancel.Name = "btnCancel";
this.btnCancel.Size = new System.Drawing.Size(171, 62); this.btnCancel.Size = new System.Drawing.Size(128, 50);
this.btnCancel.TabIndex = 288; this.btnCancel.TabIndex = 288;
this.btnCancel.Text = "结束"; this.btnCancel.Text = "结束";
this.btnCancel.UseVisualStyleBackColor = true; this.btnCancel.UseVisualStyleBackColor = true;
...@@ -135,10 +129,9 @@ ...@@ -135,10 +129,9 @@
// //
this.btnNext.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.btnNext.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnNext.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.btnNext.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnNext.Location = new System.Drawing.Point(289, 470); this.btnNext.Location = new System.Drawing.Point(217, 376);
this.btnNext.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.btnNext.Name = "btnNext"; this.btnNext.Name = "btnNext";
this.btnNext.Size = new System.Drawing.Size(171, 62); this.btnNext.Size = new System.Drawing.Size(128, 50);
this.btnNext.TabIndex = 287; this.btnNext.TabIndex = 287;
this.btnNext.Text = "下一个元器件"; this.btnNext.Text = "下一个元器件";
this.btnNext.UseVisualStyleBackColor = true; this.btnNext.UseVisualStyleBackColor = true;
...@@ -148,10 +141,9 @@ ...@@ -148,10 +141,9 @@
// //
this.btnPre.FlatStyle = System.Windows.Forms.FlatStyle.Flat; this.btnPre.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
this.btnPre.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.btnPre.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.btnPre.Location = new System.Drawing.Point(107, 470); this.btnPre.Location = new System.Drawing.Point(80, 376);
this.btnPre.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.btnPre.Name = "btnPre"; this.btnPre.Name = "btnPre";
this.btnPre.Size = new System.Drawing.Size(171, 62); this.btnPre.Size = new System.Drawing.Size(128, 50);
this.btnPre.TabIndex = 286; this.btnPre.TabIndex = 286;
this.btnPre.Text = "上一个元器件"; this.btnPre.Text = "上一个元器件";
this.btnPre.UseVisualStyleBackColor = true; this.btnPre.UseVisualStyleBackColor = true;
...@@ -162,10 +154,9 @@ ...@@ -162,10 +154,9 @@
this.label1.Dock = System.Windows.Forms.DockStyle.Fill; this.label1.Dock = System.Windows.Forms.DockStyle.Fill;
this.label1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.label1.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label1.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; this.label1.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
this.label1.Location = new System.Drawing.Point(4, 276); this.label1.Location = new System.Drawing.Point(3, 219);
this.label1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label1.Name = "label1"; this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(171, 92); this.label1.Size = new System.Drawing.Size(128, 73);
this.label1.TabIndex = 78; this.label1.TabIndex = 78;
this.label1.Text = "料盘位置:"; this.label1.Text = "料盘位置:";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight; this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
...@@ -175,10 +166,9 @@ ...@@ -175,10 +166,9 @@
this.label3.Dock = System.Windows.Forms.DockStyle.Fill; this.label3.Dock = System.Windows.Forms.DockStyle.Fill;
this.label3.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.label3.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label3.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; this.label3.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
this.label3.Location = new System.Drawing.Point(4, 368); this.label3.Location = new System.Drawing.Point(3, 292);
this.label3.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label3.Name = "label3"; this.label3.Name = "label3";
this.label3.Size = new System.Drawing.Size(171, 38); this.label3.Size = new System.Drawing.Size(128, 33);
this.label3.TabIndex = 76; this.label3.TabIndex = 76;
this.label3.Text = "数量:"; this.label3.Text = "数量:";
this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleRight; this.label3.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
...@@ -188,10 +178,9 @@ ...@@ -188,10 +178,9 @@
this.label2.Dock = System.Windows.Forms.DockStyle.Fill; this.label2.Dock = System.Windows.Forms.DockStyle.Fill;
this.label2.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.label2.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label2.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; this.label2.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
this.label2.Location = new System.Drawing.Point(4, 0); this.label2.Location = new System.Drawing.Point(3, 0);
this.label2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label2.Name = "label2"; this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(171, 92); this.label2.Size = new System.Drawing.Size(128, 73);
this.label2.TabIndex = 73; this.label2.TabIndex = 73;
this.label2.Text = "物料编号:"; this.label2.Text = "物料编号:";
this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight; this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
...@@ -201,10 +190,9 @@ ...@@ -201,10 +190,9 @@
this.label5.Dock = System.Windows.Forms.DockStyle.Fill; this.label5.Dock = System.Windows.Forms.DockStyle.Fill;
this.label5.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.label5.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.label5.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; this.label5.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
this.label5.Location = new System.Drawing.Point(4, 184); this.label5.Location = new System.Drawing.Point(3, 146);
this.label5.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.label5.Name = "label5"; this.label5.Name = "label5";
this.label5.Size = new System.Drawing.Size(171, 92); this.label5.Size = new System.Drawing.Size(128, 73);
this.label5.TabIndex = 295; this.label5.TabIndex = 295;
this.label5.Text = "描述:"; this.label5.Text = "描述:";
this.label5.TextAlign = System.Drawing.ContentAlignment.MiddleRight; this.label5.TextAlign = System.Drawing.ContentAlignment.MiddleRight;
...@@ -217,15 +205,14 @@ ...@@ -217,15 +205,14 @@
0, 0,
0, 0,
0}); 0});
this.numCount.Location = new System.Drawing.Point(183, 372); this.numCount.Location = new System.Drawing.Point(137, 295);
this.numCount.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.numCount.Maximum = new decimal(new int[] { this.numCount.Maximum = new decimal(new int[] {
1410065408, 1410065408,
2, 2,
0, 0,
0}); 0});
this.numCount.Name = "numCount"; this.numCount.Name = "numCount";
this.numCount.Size = new System.Drawing.Size(217, 34); this.numCount.Size = new System.Drawing.Size(163, 29);
this.numCount.TabIndex = 297; this.numCount.TabIndex = 297;
// //
// lblPN // lblPN
...@@ -235,10 +222,9 @@ ...@@ -235,10 +222,9 @@
this.lblPN.Dock = System.Windows.Forms.DockStyle.Fill; this.lblPN.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblPN.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.lblPN.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.lblPN.ImageAlign = System.Drawing.ContentAlignment.MiddleRight; this.lblPN.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
this.lblPN.Location = new System.Drawing.Point(183, 0); this.lblPN.Location = new System.Drawing.Point(137, 0);
this.lblPN.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblPN.Name = "lblPN"; this.lblPN.Name = "lblPN";
this.lblPN.Size = new System.Drawing.Size(532, 92); this.lblPN.Size = new System.Drawing.Size(399, 73);
this.lblPN.TabIndex = 298; this.lblPN.TabIndex = 298;
this.lblPN.Text = "移动中"; this.lblPN.Text = "移动中";
this.lblPN.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; this.lblPN.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
...@@ -248,10 +234,9 @@ ...@@ -248,10 +234,9 @@
this.tableLayoutPanel1.SetColumnSpan(this.lblTagNo, 2); this.tableLayoutPanel1.SetColumnSpan(this.lblTagNo, 2);
this.lblTagNo.Dock = System.Windows.Forms.DockStyle.Fill; this.lblTagNo.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblTagNo.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.lblTagNo.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.lblTagNo.Location = new System.Drawing.Point(183, 92); this.lblTagNo.Location = new System.Drawing.Point(137, 73);
this.lblTagNo.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblTagNo.Name = "lblTagNo"; this.lblTagNo.Name = "lblTagNo";
this.lblTagNo.Size = new System.Drawing.Size(532, 92); this.lblTagNo.Size = new System.Drawing.Size(399, 73);
this.lblTagNo.TabIndex = 299; this.lblTagNo.TabIndex = 299;
this.lblTagNo.Text = "移动中"; this.lblTagNo.Text = "移动中";
this.lblTagNo.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; this.lblTagNo.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
...@@ -261,10 +246,9 @@ ...@@ -261,10 +246,9 @@
this.tableLayoutPanel1.SetColumnSpan(this.lblDes, 2); this.tableLayoutPanel1.SetColumnSpan(this.lblDes, 2);
this.lblDes.Dock = System.Windows.Forms.DockStyle.Fill; this.lblDes.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblDes.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.lblDes.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.lblDes.Location = new System.Drawing.Point(183, 184); this.lblDes.Location = new System.Drawing.Point(137, 146);
this.lblDes.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblDes.Name = "lblDes"; this.lblDes.Name = "lblDes";
this.lblDes.Size = new System.Drawing.Size(532, 92); this.lblDes.Size = new System.Drawing.Size(399, 73);
this.lblDes.TabIndex = 300; this.lblDes.TabIndex = 300;
this.lblDes.Text = "移动中"; this.lblDes.Text = "移动中";
this.lblDes.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; this.lblDes.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
...@@ -274,10 +258,9 @@ ...@@ -274,10 +258,9 @@
this.lblPosition.AutoSize = true; this.lblPosition.AutoSize = true;
this.lblPosition.Dock = System.Windows.Forms.DockStyle.Fill; this.lblPosition.Dock = System.Windows.Forms.DockStyle.Fill;
this.lblPosition.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.lblPosition.Font = new System.Drawing.Font("微软雅黑", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.lblPosition.Location = new System.Drawing.Point(183, 276); this.lblPosition.Location = new System.Drawing.Point(137, 219);
this.lblPosition.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
this.lblPosition.Name = "lblPosition"; this.lblPosition.Name = "lblPosition";
this.lblPosition.Size = new System.Drawing.Size(351, 92); this.lblPosition.Size = new System.Drawing.Size(263, 73);
this.lblPosition.TabIndex = 301; this.lblPosition.TabIndex = 301;
this.lblPosition.Text = "移动中"; this.lblPosition.Text = "移动中";
this.lblPosition.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; this.lblPosition.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
...@@ -301,30 +284,29 @@ ...@@ -301,30 +284,29 @@
this.tableLayoutPanel1.Controls.Add(this.label1, 0, 3); this.tableLayoutPanel1.Controls.Add(this.label1, 0, 3);
this.tableLayoutPanel1.Controls.Add(this.label3, 0, 4); this.tableLayoutPanel1.Controls.Add(this.label3, 0, 4);
this.tableLayoutPanel1.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134))); this.tableLayoutPanel1.Font = new System.Drawing.Font("微软雅黑", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
this.tableLayoutPanel1.Location = new System.Drawing.Point(28, 31); this.tableLayoutPanel1.Location = new System.Drawing.Point(21, 25);
this.tableLayoutPanel1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.tableLayoutPanel1.Name = "tableLayoutPanel1"; this.tableLayoutPanel1.Name = "tableLayoutPanel1";
this.tableLayoutPanel1.RowCount = 4; this.tableLayoutPanel1.RowCount = 4;
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 25F));
this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 38F)); this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 30F));
this.tableLayoutPanel1.Size = new System.Drawing.Size(719, 406); this.tableLayoutPanel1.Size = new System.Drawing.Size(539, 325);
this.tableLayoutPanel1.TabIndex = 302; this.tableLayoutPanel1.TabIndex = 302;
// //
// FrmBoardPutCom // FrmBoardPutCom
// //
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F); this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(788, 610); this.ClientSize = new System.Drawing.Size(591, 488);
this.Controls.Add(this.tableLayoutPanel1); this.Controls.Add(this.tableLayoutPanel1);
this.Controls.Add(this.lblLeftInfo); this.Controls.Add(this.lblLeftInfo);
this.Controls.Add(this.lblEndInfo); this.Controls.Add(this.lblEndInfo);
this.Controls.Add(this.btnCancel); this.Controls.Add(this.btnCancel);
this.Controls.Add(this.btnNext); this.Controls.Add(this.btnNext);
this.Controls.Add(this.btnPre); this.Controls.Add(this.btnPre);
this.Margin = new System.Windows.Forms.Padding(5, 5, 5, 5); this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4);
this.Name = "FrmBoardPutCom"; this.Name = "FrmBoardPutCom";
this.Text = "备料"; this.Text = "备料";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmPutCom_FormClosing); this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmPutCom_FormClosing);
......
...@@ -162,6 +162,18 @@ namespace TSA_V ...@@ -162,6 +162,18 @@ namespace TSA_V
ComponetInfo com = comList[currIndex]; ComponetInfo com = comList[currIndex];
com.ComCount = newCount.ToString(); com.ComCount = newCount.ToString();
CSVBomManager.UpdateComponet(bomName, com); CSVBomManager.UpdateComponet(bomName, com);
try
{
TSAVPosition position = null;
position = CSVPositionReader<TSAVPosition>.GetPositonByNum(com.PositionNum);
LabelInfo label = LedLabelController.GetLabel(position, com, true);
LedLabelController.UpdateScreen(label);
}
catch(Exception ex)
{
LogUtil.error("备料后更新电子屏出错:" + ex.ToString());
}
} }
private void btnNext_Click(object sender, EventArgs e) private void btnNext_Click(object sender, EventArgs e)
{ {
......
...@@ -17,15 +17,15 @@ namespace TSA_V ...@@ -17,15 +17,15 @@ namespace TSA_V
{ {
public partial class FrmComponentList : FrmBase public partial class FrmComponentList : FrmBase
{ {
public static FrmComponentList instance = new FrmComponentList(); public static FrmComponentList instance = new FrmComponentList();
private FrmComponentList() private FrmComponentList()
{ {
InitializeComponent(); InitializeComponent();
} }
private void FrmPointType_Load(object sender, EventArgs e) private void FrmPointType_Load(object sender, EventArgs e)
{ {
// SetSkin(this); // SetSkin(this);
loadPositionList(); loadPositionList();
LoadComList(); LoadComList();
LanguageProcess(); LanguageProcess();
...@@ -35,10 +35,10 @@ namespace TSA_V ...@@ -35,10 +35,10 @@ namespace TSA_V
{ {
this.Column_partNumber.HeaderText = ResourceCulture.GetString(ResourceCulture.Col_Num, "位号"); this.Column_partNumber.HeaderText = ResourceCulture.GetString(ResourceCulture.Col_Num, "位号");
this.Column_PN.HeaderText = ResourceCulture.GetString(ResourceCulture.Col_Name, "物料编码"); this.Column_PN.HeaderText = ResourceCulture.GetString(ResourceCulture.Col_Name, "物料编码");
this.Column_Count.HeaderText = ResourceCulture.GetString(ResourceCulture.Col_Count, "数量"); this.Column_Count.HeaderText = ResourceCulture.GetString(ResourceCulture.Col_Count, "数量");
this.Column_Position.HeaderText = ResourceCulture.GetString(ResourceCulture.Col_Position, "料盘位置"); this.Column_Position.HeaderText = ResourceCulture.GetString(ResourceCulture.Col_Position, "料盘位置");
this.Column_Notes.HeaderText = ResourceCulture.GetString(ResourceCulture.Col_Notes, "注意事项"); this.Column_Notes.HeaderText = ResourceCulture.GetString(ResourceCulture.Col_Notes, "注意事项");
this.Column_description.HeaderText = ResourceCulture.GetString(ResourceCulture.Col_Del, "描述"); this.Column_description.HeaderText = ResourceCulture.GetString(ResourceCulture.Col_Del, "描述");
this.Column_Del.HeaderText = ResourceCulture.GetString(ResourceCulture.ItemText_Delete, "删除"); this.Column_Del.HeaderText = ResourceCulture.GetString(ResourceCulture.ItemText_Delete, "删除");
this.Column_Del.Text = ResourceCulture.GetString(ResourceCulture.ItemText_Delete, "删除"); this.Column_Del.Text = ResourceCulture.GetString(ResourceCulture.ItemText_Delete, "删除");
this.Column_Del.ToolTipText = ResourceCulture.GetString(ResourceCulture.ItemText_Delete, "删除"); this.Column_Del.ToolTipText = ResourceCulture.GetString(ResourceCulture.ItemText_Delete, "删除");
...@@ -46,7 +46,7 @@ namespace TSA_V ...@@ -46,7 +46,7 @@ namespace TSA_V
} }
private List<TSAVPosition> allPosition = new List<TSAVPosition>(CSVPositionReader<TSAVPosition>.allPositionMap.Values); private List<TSAVPosition> allPosition = new List<TSAVPosition>(CSVPositionReader<TSAVPosition>.allPositionMap.Values);
private void loadPositionList() private void loadPositionList()
{ {
cmbPositionNumList.DataSource = null; cmbPositionNumList.DataSource = null;
cmbPositionNumList.DataSource = allPosition; cmbPositionNumList.DataSource = allPosition;
cmbPositionNumList.DisplayMember = "PositionNum"; cmbPositionNumList.DisplayMember = "PositionNum";
...@@ -54,13 +54,13 @@ namespace TSA_V ...@@ -54,13 +54,13 @@ namespace TSA_V
} }
internal void LoadComList() internal void LoadComList()
{ {
List<string> keyList =new List<string> ( LoadCSVLibrary.CSVBomManager.allComMap.Keys); List<string> keyList = new List<string>(LoadCSVLibrary.CSVBomManager.allComMap.Keys);
this.cmbList.Items.Clear(); this.cmbList.Items.Clear();
foreach (string key in keyList) foreach (string key in keyList)
{ {
this.cmbList.Items.Add(key); this.cmbList.Items.Add(key);
} }
if (keyList.Count > 0) if (keyList.Count > 0)
{ {
this.cmbList.SelectedIndex = 0; this.cmbList.SelectedIndex = 0;
...@@ -85,9 +85,9 @@ namespace TSA_V ...@@ -85,9 +85,9 @@ namespace TSA_V
} }
} }
private void UpdateGridList(List<ComponetInfo > list) private void UpdateGridList(List<ComponetInfo> list)
{ {
this.dgvList.Rows.Clear(); this.dgvList.Rows.Clear();
foreach (ComponetInfo com in list) foreach (ComponetInfo com in list)
{ {
if (com != null) if (com != null)
...@@ -104,7 +104,7 @@ namespace TSA_V ...@@ -104,7 +104,7 @@ namespace TSA_V
view = new DataGridViewRow(); view = new DataGridViewRow();
view.CreateCells(dgvList); view.CreateCells(dgvList);
} }
view.Cells[Column_PN.Index].Value = com.PN.ToString(); view.Cells[Column_PN.Index].Value = com.PN.ToString();
view.Cells[this.Column_X.Index].Value = com.PositionX.ToString(); view.Cells[this.Column_X.Index].Value = com.PositionX.ToString();
view.Cells[Column_Y.Index].Value = com.PositionY.ToString(); view.Cells[Column_Y.Index].Value = com.PositionY.ToString();
view.Cells[this.Column_description.Index].Value = com.ComponentDes.ToString(); view.Cells[this.Column_description.Index].Value = com.ComponentDes.ToString();
...@@ -115,16 +115,16 @@ namespace TSA_V ...@@ -115,16 +115,16 @@ namespace TSA_V
view.Cells[this.Column_ID.Index].Value = com.Id.ToString(); view.Cells[this.Column_ID.Index].Value = com.Id.ToString();
return view; return view;
} }
private void btnNew_Click(object sender, EventArgs e) private void btnNew_Click(object sender, EventArgs e)
{ {
FrmAddCom frm = new FrmAddCom(); FrmAddCom frm = new FrmAddCom();
this.Visible = false; this.Visible = false;
frm.ShowDialog(); frm.ShowDialog();
LoadComList(); LoadComList();
this.Visible = true; this.Visible = true;
} }
private void btnSave_Click(object sender, EventArgs e) private void btnSave_Click(object sender, EventArgs e)
...@@ -138,26 +138,26 @@ namespace TSA_V ...@@ -138,26 +138,26 @@ namespace TSA_V
if (dgvList.SelectedRows != null && dgvList.SelectedRows.Count > 0) if (dgvList.SelectedRows != null && dgvList.SelectedRows.Count > 0)
{ {
int rowIndex = dgvList.SelectedRows[0].Index; int rowIndex = dgvList.SelectedRows[0].Index;
DataGridViewRow row = dgvList.Rows[rowIndex]; DataGridViewRow row = dgvList.Rows[rowIndex];
ComponetInfo obj = getRowPointInfo(row); ComponetInfo obj = getRowPointInfo(row);
string oldPosition = obj.PositionNum; string oldPosition = obj.PositionNum;
string oldTagNo = obj.TagNo; string oldTagNo = obj.TagNo;
if (obj == null) if (obj == null)
{ {
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.SelectC,"请选择元器件!")); MessageBox.Show(ResourceCulture.GetString(ResourceCulture.SelectC, "请选择元器件!"));
return; return;
} }
if (cmbPositionNumList.SelectedIndex < 0) if (cmbPositionNumList.SelectedIndex < 0)
{ {
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.SelectCPosition,"请选择元器件位置!")); MessageBox.Show(ResourceCulture.GetString(ResourceCulture.SelectCPosition, "请选择元器件位置!"));
cmbPositionNumList.Focus(); cmbPositionNumList.Focus();
return; return;
} }
TSAVPosition position = (TSAVPosition)cmbPositionNumList.SelectedItem; TSAVPosition position = (TSAVPosition)cmbPositionNumList.SelectedItem;
obj.PN = FormUtil.getValue(txtName); obj.PN = FormUtil.getValue(txtName);
obj.ComponentDes = FormUtil.getValue(txtDes); obj.ComponentDes = FormUtil.getValue(txtDes);
obj.ComCount = FormUtil.GetIntValue(txtCount).ToString(); obj.ComCount = FormUtil.GetIntValue(txtCount).ToString();
...@@ -165,31 +165,31 @@ namespace TSA_V ...@@ -165,31 +165,31 @@ namespace TSA_V
obj.TagNo = FormUtil.getValue(txtPartNum); obj.TagNo = FormUtil.getValue(txtPartNum);
obj.Id = FormUtil.GetIntValue(txtId); obj.Id = FormUtil.GetIntValue(txtId);
obj.PositionNum = position.PositionNum; obj.PositionNum = position.PositionNum;
if (obj.PN.Equals("")) if (obj.PN.Equals(""))
{ {
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.WriteComName,"请输入元器件名称!")); MessageBox.Show(ResourceCulture.GetString(ResourceCulture.WriteComName, "请输入元器件名称!"));
txtName.Focus(); txtName.Focus();
return; return;
} }
if (int.Parse(obj.ComCount)<=0) if (int.Parse(obj.ComCount) <= 0)
{ {
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.WriteComNum,"请输入元器件数量!")); MessageBox.Show(ResourceCulture.GetString(ResourceCulture.WriteComNum, "请输入元器件数量!"));
txtCount.Focus(); txtCount.Focus();
return; return;
} }
if (obj.PositionNum.Equals(oldPosition).Equals(false) &&(!String.IsNullOrEmpty(obj.TagNo))) if (obj.PositionNum.Equals(oldPosition).Equals(false) && (!String.IsNullOrEmpty(obj.TagNo)))
{ {
List<ComponetInfo> list = CSVBomManager.GetComList(cmbList.Text); List<ComponetInfo> list = CSVBomManager.GetComList(cmbList.Text);
List<ComponetInfo> objs = (from m in list where m.Id.Equals(obj.Id).Equals(false) && m.PN.Equals(obj.PN) && m.PositionNum.Equals(obj.PositionNum) select m).ToList(); List<ComponetInfo> objs = (from m in list where m.Id.Equals(obj.Id).Equals(false) && m.PN.Equals(obj.PN) && m.PositionNum.Equals(obj.PositionNum) select m).ToList();
if (objs.Count > 0) if (objs.Count > 0)
{ {
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.ComExists, "元器件已存在")); MessageBox.Show(ResourceCulture.GetString(ResourceCulture.ComExists, "元器件已存在"));
} }
} }
if (obj.TagNo.Equals(oldTagNo).Equals(false) &&( !String.IsNullOrEmpty(obj.TagNo))) if (obj.TagNo.Equals(oldTagNo).Equals(false) && (!String.IsNullOrEmpty(obj.TagNo)))
{ {
List<ComponetInfo> list = CSVBomManager.GetComList(cmbList.Text); List<ComponetInfo> list = CSVBomManager.GetComList(cmbList.Text);
List<ComponetInfo> objs = (from m in list where (!String.IsNullOrEmpty(m.TagNo)) && m.TagNo.Equals(obj.TagNo) select m).ToList(); List<ComponetInfo> objs = (from m in list where (!String.IsNullOrEmpty(m.TagNo)) && m.TagNo.Equals(obj.TagNo) select m).ToList();
...@@ -200,10 +200,10 @@ namespace TSA_V ...@@ -200,10 +200,10 @@ namespace TSA_V
return; return;
} }
} }
bool result = CSVBomManager.UpdateComponet(cmbList.Text, obj); bool result = CSVBomManager.UpdateComponet(cmbList.Text, obj);
if (result) if (result)
{ {
//ComponentManager.Update(obj); //ComponentManager.Update(obj);
SetRowInfo(dgvList.Rows[rowIndex], obj); SetRowInfo(dgvList.Rows[rowIndex], obj);
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.ComSaveOk, "元器件【{0}】保存成功!", obj.TagNo + "-" + obj.PN)); MessageBox.Show(ResourceCulture.GetString(ResourceCulture.ComSaveOk, "元器件【{0}】保存成功!", obj.TagNo + "-" + obj.PN));
...@@ -274,11 +274,11 @@ namespace TSA_V ...@@ -274,11 +274,11 @@ namespace TSA_V
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.ComExists, "元器件已存在")); MessageBox.Show(ResourceCulture.GetString(ResourceCulture.ComExists, "元器件已存在"));
} }
} }
List<ComponetInfo> list = CSVBomManager.AddCom(cmbList.Text, obj); List<ComponetInfo> list = CSVBomManager.AddCom(cmbList.Text, obj);
if (list == null) if (list == null)
{ {
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.SaveError, "保存失败!")); MessageBox.Show(ResourceCulture.GetString(ResourceCulture.SaveError, "保存失败!"));
return; return;
} }
...@@ -309,22 +309,22 @@ namespace TSA_V ...@@ -309,22 +309,22 @@ namespace TSA_V
if (row.Cells[Column_PN.Name].Value == null) if (row.Cells[Column_PN.Name].Value == null)
{ {
return null; return null;
} }
point.TagNo = row.Cells[this.Column_partNumber.Name].Value.ToString(); point.TagNo = row.Cells[this.Column_partNumber.Name].Value.ToString();
point.PN = row.Cells[this.Column_PN.Name].Value.ToString(); point.PN = row.Cells[this.Column_PN.Name].Value.ToString();
point.PositionX =Convert.ToDouble( row.Cells[this.Column_X.Name].Value.ToString()); point.PositionX = Convert.ToDouble(row.Cells[this.Column_X.Name].Value.ToString());
point.PositionY =Convert.ToDouble( row.Cells[this.Column_Y.Name].Value.ToString()); point.PositionY = Convert.ToDouble(row.Cells[this.Column_Y.Name].Value.ToString());
point.ComponentDes = row.Cells[this.Column_description.Name].Value.ToString(); point.ComponentDes = row.Cells[this.Column_description.Name].Value.ToString();
point.Notes = row.Cells[this.Column_Notes.Name].Value.ToString(); point.Notes = row.Cells[this.Column_Notes.Name].Value.ToString();
point.PositionNum = row.Cells[this.Column_Position.Name].Value.ToString(); point.PositionNum = row.Cells[this.Column_Position.Name].Value.ToString();
point.ComCount = row.Cells[this.Column_Count.Name].Value.ToString(); point.ComCount = row.Cells[this.Column_Count.Name].Value.ToString();
point.Id = Convert.ToInt32(row.Cells[this.Column_ID.Name].Value.ToString()); point.Id = Convert.ToInt32(row.Cells[this.Column_ID.Name].Value.ToString());
} }
catch (Exception ex) catch (Exception ex)
{ {
LogUtil.error( "保存数据出错:" + ex.ToString()); LogUtil.error("保存数据出错:" + ex.ToString());
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.CheckComNum,"请检查元器件数据是否正确!")); MessageBox.Show(ResourceCulture.GetString(ResourceCulture.CheckComNum, "请检查元器件数据是否正确!"));
return null; return null;
} }
return point; return point;
...@@ -333,7 +333,7 @@ namespace TSA_V ...@@ -333,7 +333,7 @@ namespace TSA_V
private void btnNewCom_Click(object sender, EventArgs e) private void btnNewCom_Click(object sender, EventArgs e)
{ {
IsNew = true; IsNew = true;
txtPartNum.Text=""; txtPartNum.Text = "";
txtName.Text = ""; txtName.Text = "";
txtDes.Text = ""; txtDes.Text = "";
txtCount.Text = ""; txtCount.Text = "";
...@@ -344,15 +344,17 @@ namespace TSA_V ...@@ -344,15 +344,17 @@ namespace TSA_V
btnNewCom.Visible = false; btnNewCom.Visible = false;
groupInfo.Text = ResourceCulture.GetString(ResourceCulture.NewCom, "新增元器件"); groupInfo.Text = ResourceCulture.GetString(ResourceCulture.NewCom, "新增元器件");
} }
private ComponetInfo selCom = null;
private void showDetail(int rowIndex) private void showDetail(int rowIndex)
{ {
DataGridViewRow row = dgvList.Rows[rowIndex]; DataGridViewRow row = dgvList.Rows[rowIndex];
ComponetInfo obj = getRowPointInfo(row); ComponetInfo obj = getRowPointInfo(row);
if (obj == null) if (obj == null)
{ {
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.ChoiceCom,"请选择元器件!")); MessageBox.Show(ResourceCulture.GetString(ResourceCulture.ChoiceCom, "请选择元器件!"));
return; return;
} }
selCom = obj;
IsNew = false; IsNew = false;
txtPartNum.Tag = obj; txtPartNum.Tag = obj;
txtName.Text = obj.PN; txtName.Text = obj.PN;
...@@ -365,13 +367,13 @@ namespace TSA_V ...@@ -365,13 +367,13 @@ namespace TSA_V
txtPartNum.Enabled = true; txtPartNum.Enabled = true;
} }
else else
{ {
txtPartNum.Enabled = false; txtPartNum.Enabled = false;
} }
btnNewCom.Visible = true ; btnNewCom.Visible = true;
txtId.Text = obj.Id.ToString(); txtId.Text = obj.Id.ToString();
//txtPosition.Text = obj.PositionNum; //txtPosition.Text = obj.PositionNum;
int selPosIndex = -1; int selPosIndex = -1;
int index = -1; int index = -1;
string[] posNum = CSVBomManager.GetPositionNum(obj.PositionNum); string[] posNum = CSVBomManager.GetPositionNum(obj.PositionNum);
...@@ -384,12 +386,12 @@ namespace TSA_V ...@@ -384,12 +386,12 @@ namespace TSA_V
break; break;
} }
} }
if (selPosIndex >= 0&&this.cmbPositionNumList.Items.Count>0) if (selPosIndex >= 0 && this.cmbPositionNumList.Items.Count > 0)
{ {
this.cmbPositionNumList.SelectedIndex = selPosIndex; this.cmbPositionNumList.SelectedIndex = selPosIndex;
} }
groupInfo.Text = ResourceCulture.GetString( ResourceCulture.ComInfo, "元器件【{ 0}】的基本信息",obj.TagNo+" "+obj.PN); groupInfo.Text = ResourceCulture.GetString(ResourceCulture.ComInfo, "元器件【{ 0}】的基本信息", obj.TagNo + " " + obj.PN);
} }
private void DeleteCom(int rowIndex) private void DeleteCom(int rowIndex)
{ {
...@@ -399,11 +401,11 @@ namespace TSA_V ...@@ -399,11 +401,11 @@ namespace TSA_V
{ {
string bomName = this.cmbList.Text; string bomName = this.cmbList.Text;
if (!CSVBomManager.canRemoveCom(bomName, obj)) if (!CSVBomManager.canRemoveCom(bomName, obj))
{ {
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.CanotDelCom, "元器件已使用,不能删除!")); MessageBox.Show(ResourceCulture.GetString(ResourceCulture.CanotDelCom, "元器件已使用,不能删除!"));
return; return;
} }
if (MessageBox.Show( if (MessageBox.Show(
ResourceCulture.GetString(ResourceCulture.SureDelCom, "确认要删除元器件【{0}】吗?", obj.TagNo + " " + obj.PN), ResourceCulture.GetString(ResourceCulture.SureDelCom, "确认要删除元器件【{0}】吗?", obj.TagNo + " " + obj.PN),
...@@ -416,11 +418,11 @@ namespace TSA_V ...@@ -416,11 +418,11 @@ namespace TSA_V
} }
else else
{ {
List<ComponetInfo> newlist= CSVBomManager.RemoveCom(cmbList.Text, obj); List<ComponetInfo> newlist = CSVBomManager.RemoveCom(cmbList.Text, obj);
if (newlist == null) if (newlist == null)
{ {
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.SaveError, "保存失败!")); MessageBox.Show(ResourceCulture.GetString(ResourceCulture.SaveError, "保存失败!"));
return; return;
} }
//this.dgvList.Rows.RemoveAt(rowIndex); //this.dgvList.Rows.RemoveAt(rowIndex);
UpdateGridList(newlist); UpdateGridList(newlist);
...@@ -449,7 +451,7 @@ namespace TSA_V ...@@ -449,7 +451,7 @@ namespace TSA_V
if (name.Equals(this.Column_Del.Name)) if (name.Equals(this.Column_Del.Name))
{ {
DeleteCom(e.RowIndex); DeleteCom(e.RowIndex);
} }
} }
} }
...@@ -465,8 +467,8 @@ namespace TSA_V ...@@ -465,8 +467,8 @@ namespace TSA_V
private void btnDownLoad_Click(object sender, EventArgs e) private void btnDownLoad_Click(object sender, EventArgs e)
{ {
SaveFileDialog sfd = new SaveFileDialog(); SaveFileDialog sfd = new SaveFileDialog();
sfd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory); sfd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
sfd.FileName = ResourceCulture.GetString( "元器件库模板"); sfd.FileName = ResourceCulture.GetString("元器件库模板");
sfd.Filter = @"csv|*.csv"; sfd.Filter = @"csv|*.csv";
DialogResult result = sfd.ShowDialog(); DialogResult result = sfd.ShowDialog();
...@@ -481,8 +483,8 @@ namespace TSA_V ...@@ -481,8 +483,8 @@ namespace TSA_V
File.Delete(filePath); File.Delete(filePath);
} }
//复制文件 //复制文件
File.Copy(sourcePath, filePath); File.Copy(sourcePath, filePath);
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.DemoSave,"模板已保存在:" )+ filePath); MessageBox.Show(ResourceCulture.GetString(ResourceCulture.DemoSave, "模板已保存在:") + filePath);
} }
} }
} }
...@@ -504,7 +506,7 @@ namespace TSA_V ...@@ -504,7 +506,7 @@ namespace TSA_V
} }
else else
{ {
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.ChoiceLibrary,"请先选择一个元器件库")); MessageBox.Show(ResourceCulture.GetString(ResourceCulture.ChoiceLibrary, "请先选择一个元器件库"));
} }
} }
...@@ -519,13 +521,13 @@ namespace TSA_V ...@@ -519,13 +521,13 @@ namespace TSA_V
{ {
if (board.bomName.Equals(bomName)) if (board.bomName.Equals(bomName))
{ {
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.CanotDelC,"元器件库【{0}】在程序【{1}】中使用,不能删除!",bomName,board.boardName)); MessageBox.Show(ResourceCulture.GetString(ResourceCulture.CanotDelC, "元器件库【{0}】在程序【{1}】中使用,不能删除!", bomName, board.boardName));
return; return;
} }
} }
if (MessageBox.Show(ResourceCulture.GetString(ResourceCulture.SureDeleteC,"确认要删除元器件库【{0}】吗?",bomName), if (MessageBox.Show(ResourceCulture.GetString(ResourceCulture.SureDeleteC, "确认要删除元器件库【{0}】吗?", bomName),
ResourceCulture.GetString(ResourceCulture.MsgTitle,"提示"), ResourceCulture.GetString(ResourceCulture.MsgTitle, "提示"),
MessageBoxButtons.OKCancel, MessageBoxButtons.OKCancel,
MessageBoxIcon.Question) != DialogResult.OK) MessageBoxIcon.Question) != DialogResult.OK)
...@@ -546,7 +548,7 @@ namespace TSA_V ...@@ -546,7 +548,7 @@ namespace TSA_V
} }
else else
{ {
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.SelectC,"请先选择一个元器件库")); MessageBox.Show(ResourceCulture.GetString(ResourceCulture.SelectC, "请先选择一个元器件库"));
} }
} }
...@@ -558,8 +560,8 @@ namespace TSA_V ...@@ -558,8 +560,8 @@ namespace TSA_V
} }
private void FrmComponentList_Shown(object sender, EventArgs e) private void FrmComponentList_Shown(object sender, EventArgs e)
{ {
} }
private void FrmComponentList_VisibleChanged(object sender, EventArgs e) private void FrmComponentList_VisibleChanged(object sender, EventArgs e)
...@@ -583,31 +585,46 @@ namespace TSA_V ...@@ -583,31 +585,46 @@ namespace TSA_V
linkLabel1.Visible = true; linkLabel1.Visible = true;
linkLabel2.Visible = true; linkLabel2.Visible = true;
} }
else{ else
{
linkLabel1.Visible = false ; linkLabel1.Visible = false;
linkLabel2.Visible = false ; linkLabel2.Visible = false;
}
}
private LabelInfo PreLabel = null;
private void CloseLed()
{
if (PreLabel != null)
{
LedLabelController.CloseLed(PreLabel.ip, PreLabel.mac);
PreLabel = null;
} }
} }
Dictionary<string, string> pairs = new Dictionary<string, string>();
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{ {
CloseLed();
string pNum = cmbPositionNumList.Text; string pNum = cmbPositionNumList.Text;
TSAVPosition position = CSVPositionReader<TSAVPosition>.GetPositonByNum(pNum); TSAVPosition position = CSVPositionReader<TSAVPosition>.GetPositonByNum(pNum);
if (position != null&&position.PositionType.Equals(2)) if (position != null && position.PositionType.Equals(2))
{ {
ScanRequestLabel.RequestPost(position, txtCount.Text, txtPartNum.Text, txtDes.Text, out pairs); LedLabelController.OpenLed(position.DeviceIP, position.Leds);
PreLabel = LedLabelController.GetLabel(position, selCom, true);
LedLabelController.UpdateScreen(PreLabel);
//ScanRequestLabel.RequestPost(position, txtCount.Text, txtPartNum.Text, txtDes.Text, out _);
} }
} }
private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) private void linkLabel2_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{ {
if (pairs.Count != 0) CloseLed();
{ //if (pairs.Count != 0)
ScanRequestLabel.Turnoffthelights(pairs); //{
pairs.Clear(); // ScanRequestLabel.Turnoffthelights(pairs);
} // pairs.Clear();
//}
} }
} }
} }
...@@ -9,7 +9,6 @@ using System.Text; ...@@ -9,7 +9,6 @@ using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows.Forms; using System.Windows.Forms;
using TSA_V.Common; using TSA_V.Common;
using TSA_V.DeviceLibrary.manager;
namespace TSA_V namespace TSA_V
{ {
......
...@@ -68,7 +68,7 @@ namespace TSA_V ...@@ -68,7 +68,7 @@ namespace TSA_V
this.lblVersion.Name = "lblVersion"; this.lblVersion.Name = "lblVersion";
this.lblVersion.Size = new System.Drawing.Size(65, 17); this.lblVersion.Size = new System.Drawing.Size(65, 17);
this.lblVersion.TabIndex = 11; this.lblVersion.TabIndex = 11;
this.lblVersion.Text = "版本号 3.0"; this.lblVersion.Text = "版本号 4.1";
// //
// btnExit // btnExit
// //
......
...@@ -109,7 +109,7 @@ namespace TSA_V ...@@ -109,7 +109,7 @@ namespace TSA_V
string time = GetVersion(true); string time = GetVersion(true);
System.Reflection.AssemblyName assemblyName = System.Reflection.Assembly.GetExecutingAssembly().GetName(); System.Reflection.AssemblyName assemblyName = System.Reflection.Assembly.GetExecutingAssembly().GetName();
lblVersion.Text = "V" + assemblyName.Version.ToString(); lblVersion.Text = "V" + assemblyName.Version.ToString();
lblVersion.Text = "V3.0"; lblVersion.Text = "V4.0";
//lblVersion.Text = "V" + assemblyName.Version.ToString() + "(" + time + ")"; //lblVersion.Text = "V" + assemblyName.Version.ToString() + "(" + time + ")";
LblUserName.Text = FormManager.UserInfo.Name + "/" + FormManager.UserInfo.Limit; LblUserName.Text = FormManager.UserInfo.Name + "/" + FormManager.UserInfo.Limit;
......
...@@ -123,395 +123,395 @@ ...@@ -123,395 +123,395 @@
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="btnWork.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="btnWork.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value> <value>
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
</value> </value>
</data> </data>
<data name="btnHistory.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="btnHistory.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
...@@ -1016,118 +1016,118 @@ ...@@ -1016,118 +1016,118 @@
<data name="btnAOI.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="btnAOI.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value> <value>
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
</value> </value>
</data> </data>
<data name="btnProduct.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> <data name="btnProduct.BackgroundImage" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
......
...@@ -31,7 +31,7 @@ using System.Runtime.InteropServices; ...@@ -31,7 +31,7 @@ using System.Runtime.InteropServices;
// //
// 可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值, // 可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值,
// 方法是按如下所示使用“*”: // 方法是按如下所示使用“*”:
[assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("4.1.*")]
//[assembly: AssemblyVersion("1.0.0.0")] //[assembly: AssemblyVersion("1.0.0.0")]
//[assembly: AssemblyFileVersion("1.0.0.0")] //[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: log4net.Config.DOMConfigurator(ConfigFileExtension = "config", Watch = true)] [assembly: log4net.Config.DOMConfigurator(ConfigFileExtension = "config", Watch = true)]
...@@ -121,7 +121,7 @@ ...@@ -121,7 +121,7 @@
<value>SMART WORK STATION</value> <value>SMART WORK STATION</value>
</data> </data>
<data name="FrmMenu_lblVersion_Text" xml:space="preserve"> <data name="FrmMenu_lblVersion_Text" xml:space="preserve">
<value>Version 1.1.2</value> <value>Version 4.1.2</value>
</data> </data>
<data name="FrmMenu_btnExit_Text" xml:space="preserve"> <data name="FrmMenu_btnExit_Text" xml:space="preserve">
<value>Quit</value> <value>Quit</value>
...@@ -2598,4 +2598,20 @@ ...@@ -2598,4 +2598,20 @@
<data name="FrmComponentList_linkLabel2_Text" xml:space="preserve"> <data name="FrmComponentList_linkLabel2_Text" xml:space="preserve">
<value>Close LED</value> <value>Close LED</value>
</data> </data>
<data name="Label_lblPos" xml:space="preserve">
<value>Postion: </value>
</data>
<data name="Label_lblNum" xml:space="preserve">
<value>Count: </value>
</data>
<data name="Label_lblPn" xml:space="preserve">
<value>PartNumber: </value>
</data>
<data name="Label_lblDes" xml:space="preserve">
<value>Description : </value>
</data>
<data name="Label_lblNotes" xml:space="preserve">
<value>Note: </value>
</data>
</root> </root>
\ No newline at end of file \ No newline at end of file
...@@ -121,7 +121,7 @@ ...@@ -121,7 +121,7 @@
<value>智能组装工作站/智能工作站</value> <value>智能组装工作站/智能工作站</value>
</data> </data>
<data name="FrmMenu_lblVersion_Text" xml:space="preserve"> <data name="FrmMenu_lblVersion_Text" xml:space="preserve">
<value>版本号 1.1.2</value> <value>版本号 4.1.2</value>
</data> </data>
<data name="FrmMenu_btnExit_Text" xml:space="preserve"> <data name="FrmMenu_btnExit_Text" xml:space="preserve">
<value>退出</value> <value>退出</value>
......
...@@ -121,7 +121,7 @@ ...@@ -121,7 +121,7 @@
<value>智能组装工作站/智能工作站</value> <value>智能组装工作站/智能工作站</value>
</data> </data>
<data name="FrmMenu_lblVersion_Text" xml:space="preserve"> <data name="FrmMenu_lblVersion_Text" xml:space="preserve">
<value>版本号 1.1.2</value> <value>版本号 4.1.2</value>
</data> </data>
<data name="FrmMenu_btnExit_Text" xml:space="preserve"> <data name="FrmMenu_btnExit_Text" xml:space="preserve">
<value>退出</value> <value>退出</value>
...@@ -2604,4 +2604,20 @@ ...@@ -2604,4 +2604,20 @@
<data name="FrmComponentList_linkLabel2_Text" xml:space="preserve"> <data name="FrmComponentList_linkLabel2_Text" xml:space="preserve">
<value>关灯测试</value> <value>关灯测试</value>
</data> </data>
</root>
\ No newline at end of file \ No newline at end of file
<data name="Label_lblPos" xml:space="preserve">
<value>位置: </value>
</data>
<data name="Label_lblNum" xml:space="preserve">
<value>库存数量: </value>
</data>
<data name="Label_lblPn" xml:space="preserve">
<value>物料编码: </value>
</data>
<data name="Label_lblDes" xml:space="preserve">
<value>描述: </value>
</data>
<data name="Label_lblNotes" xml:space="preserve">
<value>注意事项: </value>
</data>
</root>
\ No newline at end of file \ No newline at end of file
...@@ -15,8 +15,7 @@ using PUSICANLibrary; ...@@ -15,8 +15,7 @@ using PUSICANLibrary;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using AOI; using AOI;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Net.Http; using System.Net.Http;
using TSA_V.DeviceLibrary.manager;
using System.Linq; using System.Linq;
using System.Configuration; using System.Configuration;
...@@ -941,6 +940,26 @@ namespace TSA_V ...@@ -941,6 +940,26 @@ namespace TSA_V
{ {
MessageBox.Show(ResourceCulture.GetString(ResourceCulture.UpdateCNumOk, "元器件【{0}】的数量已更新为【{1}】", smtPoint.TagNo, count)); MessageBox.Show(ResourceCulture.GetString(ResourceCulture.UpdateCNumOk, "元器件【{0}】的数量已更新为【{1}】", smtPoint.TagNo, count));
} }
try
{
ComponetInfo com = CSVBomManager.GetCom(BoardManager.CurrBoard.bomName, smtPoint, true);
TSAVPosition position = null;
if (com != null)
{
position = CSVPositionReader<TSAVPosition>.GetPositonByNum(com.PositionNum);
}
else
{
position = CSVPositionReader<TSAVPosition>.GetPositonByNum(smtPoint.PositionNum);
}
LabelInfo label = LedLabelController.GetLabel(position, com, true);
LedLabelController.UpdateScreen(label);
}
catch (Exception ex)
{
LogUtil.error("更改屏幕后更新电子屏出错:" + ex.ToString());
}
txtCount.Visible = false; txtCount.Visible = false;
lblCount.Text = count.ToString(); lblCount.Text = count.ToString();
......
此文件类型无法预览
此文件类型无法预览
此文件类型无法预览
此文件类型无法预览
此文件类型无法预览
此文件类型无法预览
此文件类型无法预览
此文件类型无法预览
此文件类型无法预览
此文件类型无法预览
...@@ -57,6 +57,17 @@ ...@@ -57,6 +57,17 @@
the contents of this method with the code editor. the contents of this method with the code editor.
</summary> </summary>
</member> </member>
<member name="P:ConfigHelper.CheckedListBoxEx.DataSource">
<summary>
绑定数据源
</summary>
<param name="data"></param>
</member>
<member name="T:ConfigHelper.CheckItem">
<summary>
Represents an item in the checklistbox
</summary>
</member>
<member name="T:ConfigHelper.Config"> <member name="T:ConfigHelper.Config">
<summary> <summary>
自定义配置存取 自定义配置存取
......
此文件类型无法预览
<?xml version="1.0"?>
<doc>
<assembly>
<name>OpenCvSharp.Extensions</name>
</assembly>
<members>
<member name="T:OpenCvSharp.Extensions.Binarizer">
<summary>
Various binarization methods (ATTENTION : The methods of this class is not implemented in OpenCV)
</summary>
</member>
<member name="M:OpenCvSharp.Extensions.Binarizer.Niblack(OpenCvSharp.Mat,OpenCvSharp.Mat,System.Int32,System.Double)">
<summary>
Binarizes by Niblack's method (This is faster but memory-hogging)
</summary>
<param name="src">Input image</param>
<param name="dst">Output image</param>
<param name="kernelSize">Window size</param>
<param name="k">Adequate coefficient</param>
</member>
<member name="M:OpenCvSharp.Extensions.Binarizer.Sauvola(OpenCvSharp.Mat,OpenCvSharp.Mat,System.Int32,System.Double,System.Double)">
<summary>
Binarizes by Sauvola's method (This is faster but memory-hogging)
</summary>
<param name="src">Input image</param>
<param name="dst">Output image</param>
<param name="kernelSize">Window size</param>
<param name="k">Adequate coefficient</param>
<param name="r">Adequate coefficient</param>
</member>
<member name="M:OpenCvSharp.Extensions.Binarizer.Bernsen(OpenCvSharp.Mat,OpenCvSharp.Mat,System.Int32,System.Byte,System.Byte)">
<summary>
Binarizes by Bernsen's method
</summary>
<param name="src">Input image</param>
<param name="dst">Output image</param>
<param name="kernelSize">Window size</param>
<param name="constrastMin">Adequate coefficient</param>
<param name="bgThreshold">Adequate coefficient</param>
</member>
<member name="M:OpenCvSharp.Extensions.Binarizer.Nick(OpenCvSharp.Mat,OpenCvSharp.Mat,System.Int32,System.Double)">
<summary>
Binarizes by Nick's method
</summary>
<param name="src">Input image</param>
<param name="dst">Output image</param>
<param name="kernelSize">Window size</param>
<param name="k">Adequate coefficient</param>
</member>
<member name="M:OpenCvSharp.Extensions.Binarizer.MinMax(OpenCvSharp.Mat,System.Int32,System.Int32,System.Int32,System.Byte@,System.Byte@)">
<summary>
注目画素の周辺画素の最大値と最小値を求める
</summary>
<param name="img">画像の画素データ</param>
<param name="x">x座標</param>
<param name="y">y座標</param>
<param name="size">周辺画素の探索サイズ。奇数でなければならない</param>
<param name="min">出力される最小値</param>
<param name="max">出力される最大値</param>
</member>
<member name="T:OpenCvSharp.Extensions.BitmapConverter">
<summary>
static class which provides conversion between System.Drawing.Bitmap and Mat
</summary>
</member>
<member name="M:OpenCvSharp.Extensions.BitmapConverter.ToMat(System.Drawing.Bitmap)">
<summary>
Converts System.Drawing.Bitmap to Mat
</summary>
<param name="src">System.Drawing.Bitmap object to be converted</param>
<returns>A Mat object which is converted from System.Drawing.Bitmap</returns>
</member>
<member name="M:OpenCvSharp.Extensions.BitmapConverter.ToMat(System.Drawing.Bitmap,OpenCvSharp.Mat)">
<summary>
Converts System.Drawing.Bitmap to Mat
</summary>
<param name="src">System.Drawing.Bitmap object to be converted</param>
<param name="dst">A Mat object which is converted from System.Drawing.Bitmap</param>
</member>
<member name="M:OpenCvSharp.Extensions.BitmapConverter.ToBitmap(OpenCvSharp.Mat)">
<summary>
Converts Mat to System.Drawing.Bitmap
</summary>
<param name="src">Mat</param>
<returns></returns>
</member>
<member name="M:OpenCvSharp.Extensions.BitmapConverter.ToBitmap(OpenCvSharp.Mat,System.Drawing.Imaging.PixelFormat)">
<summary>
Converts Mat to System.Drawing.Bitmap
</summary>
<param name="src">Mat</param>
<param name="pf">Pixel Depth</param>
<returns></returns>
</member>
<member name="M:OpenCvSharp.Extensions.BitmapConverter.ToBitmap(OpenCvSharp.Mat,System.Drawing.Bitmap)">
<summary>
Converts Mat to System.Drawing.Bitmap
</summary>
<param name="src">Mat</param>
<param name="dst">Mat</param>
<remarks>Author: shimat, Gummo (ROI support)</remarks>
</member>
<member name="T:OpenCvSharp.Extensions.CvExtensions">
<summary>
</summary>
</member>
<member name="M:OpenCvSharp.Extensions.CvExtensions.HoughLinesProbabilisticEx(OpenCvSharp.Mat,System.Double,System.Double,System.Int32,System.Double,System.Double,System.Double,System.Double)">
<summary>
</summary>
<param name="img"></param>
<param name="rho"></param>
<param name="theta"></param>
<param name="threshold"></param>
<param name="minLineLength"></param>
<param name="maxLineGap"></param>
<param name="thetaMin"></param>
<param name="thetaMax"></param>
<returns></returns>
</member>
<member name="T:OpenCvSharp.Extensions.OS">
<summary>
</summary>
</member>
<member name="T:OpenCvSharp.Extensions.Runtime">
<summary>
</summary>
</member>
<member name="T:OpenCvSharp.Extensions.Platform">
<summary>
Provides information for the platform which the user is using
</summary>
</member>
<member name="F:OpenCvSharp.Extensions.Platform.OS">
<summary>
OS type
</summary>
</member>
<member name="F:OpenCvSharp.Extensions.Platform.Runtime">
<summary>
Runtime type
</summary>
</member>
</members>
</doc>
此文件类型无法预览
此文件的差异太大,无法显示。
此文件类型无法预览
<?xml version="1.0" encoding="utf-8"?><doc>
<assembly>
<name>System.Buffers</name>
</assembly>
<members>
<member name="T:System.Buffers.ArrayPool`1">
<summary>Provides a resource pool that enables reusing instances of type <see cref="T[]"></see>.</summary>
<typeparam name="T">The type of the objects that are in the resource pool.</typeparam>
</member>
<member name="M:System.Buffers.ArrayPool`1.#ctor">
<summary>Initializes a new instance of the <see cref="T:System.Buffers.ArrayPool`1"></see> class.</summary>
</member>
<member name="M:System.Buffers.ArrayPool`1.Create">
<summary>Creates a new instance of the <see cref="T:System.Buffers.ArrayPool`1"></see> class.</summary>
<returns>A new instance of the <see cref="System.Buffers.ArrayPool`1"></see> class.</returns>
</member>
<member name="M:System.Buffers.ArrayPool`1.Create(System.Int32,System.Int32)">
<summary>Creates a new instance of the <see cref="T:System.Buffers.ArrayPool`1"></see> class using the specifed configuration.</summary>
<param name="maxArrayLength">The maximum length of an array instance that may be stored in the pool.</param>
<param name="maxArraysPerBucket">The maximum number of array instances that may be stored in each bucket in the pool. The pool groups arrays of similar lengths into buckets for faster access.</param>
<returns>A new instance of the <see cref="System.Buffers.ArrayPool`1"></see> class with the specified configuration.</returns>
</member>
<member name="M:System.Buffers.ArrayPool`1.Rent(System.Int32)">
<summary>Retrieves a buffer that is at least the requested length.</summary>
<param name="minimumLength">The minimum length of the array.</param>
<returns>An array of type <see cref="T[]"></see> that is at least <paramref name="minimumLength">minimumLength</paramref> in length.</returns>
</member>
<member name="M:System.Buffers.ArrayPool`1.Return(`0[],System.Boolean)">
<summary>Returns an array to the pool that was previously obtained using the <see cref="M:System.Buffers.ArrayPool`1.Rent(System.Int32)"></see> method on the same <see cref="T:System.Buffers.ArrayPool`1"></see> instance.</summary>
<param name="array">A buffer to return to the pool that was previously obtained using the <see cref="M:System.Buffers.ArrayPool`1.Rent(System.Int32)"></see> method.</param>
<param name="clearArray">Indicates whether the contents of the buffer should be cleared before reuse. If <paramref name="clearArray">clearArray</paramref> is set to true, and if the pool will store the buffer to enable subsequent reuse, the <see cref="M:System.Buffers.ArrayPool`1.Return(`0[],System.Boolean)"></see> method will clear the <paramref name="array">array</paramref> of its contents so that a subsequent caller using the <see cref="M:System.Buffers.ArrayPool`1.Rent(System.Int32)"></see> method will not see the content of the previous caller. If <paramref name="clearArray">clearArray</paramref> is set to false or if the pool will release the buffer, the array&amp;#39;s contents are left unchanged.</param>
</member>
<member name="P:System.Buffers.ArrayPool`1.Shared">
<summary>Gets a shared <see cref="T:System.Buffers.ArrayPool`1"></see> instance.</summary>
<returns>A shared <see cref="System.Buffers.ArrayPool`1"></see> instance.</returns>
</member>
</members>
</doc>
\ No newline at end of file \ No newline at end of file
此文件类型无法预览
<?xml version="1.0"?>
<doc>
<assembly>
<name>System.Drawing.Common</name>
</assembly>
<members>
<member name="T:System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute">
<summary>
Indicates that the specified method requires dynamic access to code that is not referenced
statically, for example through <see cref="N:System.Reflection"/>.
</summary>
<remarks>
This allows tools to understand which methods are unsafe to call when removing unreferenced
code from an application.
</remarks>
</member>
<member name="M:System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute.#ctor(System.String)">
<summary>
Initializes a new instance of the <see cref="T:System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute"/> class
with the specified message.
</summary>
<param name="message">
A message that contains information about the usage of unreferenced code.
</param>
</member>
<member name="P:System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute.Message">
<summary>
Gets a message that contains information about the usage of unreferenced code.
</summary>
</member>
<member name="P:System.Diagnostics.CodeAnalysis.RequiresUnreferencedCodeAttribute.Url">
<summary>
Gets or sets an optional URL that contains more information about the method,
why it requires unreferenced code, and what options a consumer has to deal with it.
</summary>
</member>
<member name="T:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute">
<summary>
Suppresses reporting of a specific rule violation, allowing multiple suppressions on a
single code artifact.
</summary>
<remarks>
<see cref="T:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute"/> is different than
<see cref="T:System.Diagnostics.CodeAnalysis.SuppressMessageAttribute"/> in that it doesn't have a
<see cref="T:System.Diagnostics.ConditionalAttribute"/>. So it is always preserved in the compiled assembly.
</remarks>
</member>
<member name="M:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.#ctor(System.String,System.String)">
<summary>
Initializes a new instance of the <see cref="T:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute"/>
class, specifying the category of the tool and the identifier for an analysis rule.
</summary>
<param name="category">The category for the attribute.</param>
<param name="checkId">The identifier of the analysis rule the attribute applies to.</param>
</member>
<member name="P:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.Category">
<summary>
Gets the category identifying the classification of the attribute.
</summary>
<remarks>
The <see cref="P:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.Category"/> property describes the tool or tool analysis category
for which a message suppression attribute applies.
</remarks>
</member>
<member name="P:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.CheckId">
<summary>
Gets the identifier of the analysis tool rule to be suppressed.
</summary>
<remarks>
Concatenated together, the <see cref="P:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.Category"/> and <see cref="P:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.CheckId"/>
properties form a unique check identifier.
</remarks>
</member>
<member name="P:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.Scope">
<summary>
Gets or sets the scope of the code that is relevant for the attribute.
</summary>
<remarks>
The Scope property is an optional argument that specifies the metadata scope for which
the attribute is relevant.
</remarks>
</member>
<member name="P:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.Target">
<summary>
Gets or sets a fully qualified path that represents the target of the attribute.
</summary>
<remarks>
The <see cref="P:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.Target"/> property is an optional argument identifying the analysis target
of the attribute. An example value is "System.IO.Stream.ctor():System.Void".
Because it is fully qualified, it can be long, particularly for targets such as parameters.
The analysis tool user interface should be capable of automatically formatting the parameter.
</remarks>
</member>
<member name="P:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.MessageId">
<summary>
Gets or sets an optional argument expanding on exclusion criteria.
</summary>
<remarks>
The <see cref="P:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.MessageId"/> property is an optional argument that specifies additional
exclusion where the literal metadata target is not sufficiently precise. For example,
the <see cref="T:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute"/> cannot be applied within a method,
and it may be desirable to suppress a violation against a statement in the method that will
give a rule violation, but not against all statements in the method.
</remarks>
</member>
<member name="P:System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessageAttribute.Justification">
<summary>
Gets or sets the justification for suppressing the code analysis message.
</summary>
</member>
<member name="T:System.Diagnostics.CodeAnalysis.AllowNullAttribute">
<summary>Specifies that null is allowed as an input even if the corresponding type disallows it.</summary>
</member>
<member name="T:System.Diagnostics.CodeAnalysis.DisallowNullAttribute">
<summary>Specifies that null is disallowed as an input even if the corresponding type allows it.</summary>
</member>
<member name="T:System.Diagnostics.CodeAnalysis.MaybeNullAttribute">
<summary>Specifies that an output may be null even if the corresponding type disallows it.</summary>
</member>
<member name="T:System.Diagnostics.CodeAnalysis.NotNullAttribute">
<summary>Specifies that an output will not be null even if the corresponding type allows it. Specifies that an input argument was not null when the call returns.</summary>
</member>
<member name="T:System.Diagnostics.CodeAnalysis.MaybeNullWhenAttribute">
<summary>Specifies that when a method returns <see cref="P:System.Diagnostics.CodeAnalysis.MaybeNullWhenAttribute.ReturnValue"/>, the parameter may be null even if the corresponding type disallows it.</summary>
</member>
<member name="M:System.Diagnostics.CodeAnalysis.MaybeNullWhenAttribute.#ctor(System.Boolean)">
<summary>Initializes the attribute with the specified return value condition.</summary>
<param name="returnValue">
The return value condition. If the method returns this value, the associated parameter may be null.
</param>
</member>
<member name="P:System.Diagnostics.CodeAnalysis.MaybeNullWhenAttribute.ReturnValue">
<summary>Gets the return value condition.</summary>
</member>
<member name="T:System.Diagnostics.CodeAnalysis.NotNullWhenAttribute">
<summary>Specifies that when a method returns <see cref="P:System.Diagnostics.CodeAnalysis.NotNullWhenAttribute.ReturnValue"/>, the parameter will not be null even if the corresponding type allows it.</summary>
</member>
<member name="M:System.Diagnostics.CodeAnalysis.NotNullWhenAttribute.#ctor(System.Boolean)">
<summary>Initializes the attribute with the specified return value condition.</summary>
<param name="returnValue">
The return value condition. If the method returns this value, the associated parameter will not be null.
</param>
</member>
<member name="P:System.Diagnostics.CodeAnalysis.NotNullWhenAttribute.ReturnValue">
<summary>Gets the return value condition.</summary>
</member>
<member name="T:System.Diagnostics.CodeAnalysis.NotNullIfNotNullAttribute">
<summary>Specifies that the output will be non-null if the named parameter is non-null.</summary>
</member>
<member name="M:System.Diagnostics.CodeAnalysis.NotNullIfNotNullAttribute.#ctor(System.String)">
<summary>Initializes the attribute with the associated parameter name.</summary>
<param name="parameterName">
The associated parameter name. The output will be non-null if the argument to the parameter specified is non-null.
</param>
</member>
<member name="P:System.Diagnostics.CodeAnalysis.NotNullIfNotNullAttribute.ParameterName">
<summary>Gets the associated parameter name.</summary>
</member>
<member name="T:System.Diagnostics.CodeAnalysis.DoesNotReturnAttribute">
<summary>Applied to a method that will never return under any circumstance.</summary>
</member>
<member name="T:System.Diagnostics.CodeAnalysis.DoesNotReturnIfAttribute">
<summary>Specifies that the method will not return if the associated Boolean parameter is passed the specified value.</summary>
</member>
<member name="M:System.Diagnostics.CodeAnalysis.DoesNotReturnIfAttribute.#ctor(System.Boolean)">
<summary>Initializes the attribute with the specified parameter value.</summary>
<param name="parameterValue">
The condition parameter value. Code after the method will be considered unreachable by diagnostics if the argument to
the associated parameter matches this value.
</param>
</member>
<member name="P:System.Diagnostics.CodeAnalysis.DoesNotReturnIfAttribute.ParameterValue">
<summary>Gets the condition parameter value.</summary>
</member>
<member name="T:System.Diagnostics.CodeAnalysis.MemberNotNullAttribute">
<summary>Specifies that the method or property will ensure that the listed field and property members have not-null values.</summary>
</member>
<member name="M:System.Diagnostics.CodeAnalysis.MemberNotNullAttribute.#ctor(System.String)">
<summary>Initializes the attribute with a field or property member.</summary>
<param name="member">
The field or property member that is promised to be not-null.
</param>
</member>
<member name="M:System.Diagnostics.CodeAnalysis.MemberNotNullAttribute.#ctor(System.String[])">
<summary>Initializes the attribute with the list of field and property members.</summary>
<param name="members">
The list of field and property members that are promised to be not-null.
</param>
</member>
<member name="P:System.Diagnostics.CodeAnalysis.MemberNotNullAttribute.Members">
<summary>Gets field or property member names.</summary>
</member>
<member name="T:System.Diagnostics.CodeAnalysis.MemberNotNullWhenAttribute">
<summary>Specifies that the method or property will ensure that the listed field and property members have not-null values when returning with the specified return value condition.</summary>
</member>
<member name="M:System.Diagnostics.CodeAnalysis.MemberNotNullWhenAttribute.#ctor(System.Boolean,System.String)">
<summary>Initializes the attribute with the specified return value condition and a field or property member.</summary>
<param name="returnValue">
The return value condition. If the method returns this value, the associated parameter will not be null.
</param>
<param name="member">
The field or property member that is promised to be not-null.
</param>
</member>
<member name="M:System.Diagnostics.CodeAnalysis.MemberNotNullWhenAttribute.#ctor(System.Boolean,System.String[])">
<summary>Initializes the attribute with the specified return value condition and list of field and property members.</summary>
<param name="returnValue">
The return value condition. If the method returns this value, the associated parameter will not be null.
</param>
<param name="members">
The list of field and property members that are promised to be not-null.
</param>
</member>
<member name="P:System.Diagnostics.CodeAnalysis.MemberNotNullWhenAttribute.ReturnValue">
<summary>Gets the return value condition.</summary>
</member>
<member name="P:System.Diagnostics.CodeAnalysis.MemberNotNullWhenAttribute.Members">
<summary>Gets field or property member names.</summary>
</member>
<member name="P:System.SR.CantTellPrinterName">
<summary>(printer name protected due to security restrictions)</summary>
</member>
<member name="P:System.SR.CantChangeImmutableObjects">
<summary>Changes cannot be made to {0} because permissions are not valid.</summary>
</member>
<member name="P:System.SR.CantMakeIconTransparent">
<summary>Bitmaps that are icons cannot be made transparent. Icons natively support transparency. Use the Icon constructor to create an icon.</summary>
</member>
<member name="P:System.SR.ColorNotSystemColor">
<summary>The color {0} is not a system color.</summary>
</member>
<member name="P:System.SR.GdiplusAborted">
<summary>Function was ended.</summary>
</member>
<member name="P:System.SR.GdiplusAccessDenied">
<summary>File access is denied.</summary>
</member>
<member name="P:System.SR.GdiplusCannotCreateGraphicsFromIndexedPixelFormat">
<summary>A Graphics object cannot be created from an image that has an indexed pixel format.</summary>
</member>
<member name="P:System.SR.GdiplusCannotSetPixelFromIndexedPixelFormat">
<summary>SetPixel is not supported for images with indexed pixel formats.</summary>
</member>
<member name="P:System.SR.GdiplusDestPointsInvalidParallelogram">
<summary>Destination points define a parallelogram which must have a length of 3. These points will represent the upper-left, upper-right, and lower-left coordinates (defined in that order).</summary>
</member>
<member name="P:System.SR.GdiplusDestPointsInvalidLength">
<summary>Destination points must be an array with a length of 3 or 4. A length of 3 defines a parallelogram with the upper-left, upper-right, and lower-left corners. A length of 4 defines a quadrilateral with the fourth element of the array specifying the lower-rig ...</summary>
</member>
<member name="P:System.SR.GdiplusFileNotFound">
<summary>File not found.</summary>
</member>
<member name="P:System.SR.GdiplusFontFamilyNotFound">
<summary>Font '{0}' cannot be found.</summary>
</member>
<member name="P:System.SR.GdiplusFontStyleNotFound">
<summary>Font '{0}' does not support style '{1}'.</summary>
</member>
<member name="P:System.SR.GdiplusGenericError">
<summary>A generic error occurred in GDI+.</summary>
</member>
<member name="P:System.SR.GdiplusInsufficientBuffer">
<summary>Buffer is too small (internal GDI+ error).</summary>
</member>
<member name="P:System.SR.GdiplusInvalidParameter">
<summary>Parameter is not valid.</summary>
</member>
<member name="P:System.SR.GdiplusInvalidRectangle">
<summary>Rectangle '{0}' cannot have a width or height equal to 0.</summary>
</member>
<member name="P:System.SR.GdiplusInvalidSize">
<summary>Operation requires a transformation of the image from GDI+ to GDI. GDI does not support images with a width or height greater than 32767.</summary>
</member>
<member name="P:System.SR.GdiplusOutOfMemory">
<summary>Out of memory.</summary>
</member>
<member name="P:System.SR.GdiplusNotImplemented">
<summary>Not implemented.</summary>
</member>
<member name="P:System.SR.GdiplusNotInitialized">
<summary>GDI+ is not properly initialized (internal GDI+ error).</summary>
</member>
<member name="P:System.SR.GdiplusNotTrueTypeFont">
<summary>Only TrueType fonts are supported. '{0}' is not a TrueType font.</summary>
</member>
<member name="P:System.SR.GdiplusNotTrueTypeFont_NoName">
<summary>Only TrueType fonts are supported. This is not a TrueType font.</summary>
</member>
<member name="P:System.SR.GdiplusObjectBusy">
<summary>Object is currently in use elsewhere.</summary>
</member>
<member name="P:System.SR.GdiplusOverflow">
<summary>Overflow error.</summary>
</member>
<member name="P:System.SR.GdiplusPropertyNotFoundError">
<summary>Property cannot be found.</summary>
</member>
<member name="P:System.SR.GdiplusPropertyNotSupportedError">
<summary>Property is not supported.</summary>
</member>
<member name="P:System.SR.GdiplusUnknown">
<summary>Unknown GDI+ error occurred.</summary>
</member>
<member name="P:System.SR.GdiplusUnknownImageFormat">
<summary>Image format is unknown.</summary>
</member>
<member name="P:System.SR.GdiplusUnsupportedGdiplusVersion">
<summary>Current version of GDI+ does not support this feature.</summary>
</member>
<member name="P:System.SR.GdiplusWrongState">
<summary>Bitmap region is already locked.</summary>
</member>
<member name="P:System.SR.GlobalAssemblyCache">
<summary>(Global Assembly Cache)</summary>
</member>
<member name="P:System.SR.GraphicsBufferCurrentlyBusy">
<summary>BufferedGraphicsContext cannot be disposed of because a buffer operation is currently in progress.</summary>
</member>
<member name="P:System.SR.GraphicsBufferQueryFail">
<summary>Screen-compatible bitmap cannot be created. The screen bitmap format cannot be determined.</summary>
</member>
<member name="P:System.SR.IconInvalidMaskLength">
<summary>'{0}' data length expected {1}, read {2}</summary>
</member>
<member name="P:System.SR.IllegalState">
<summary>Internal state of the {0} class is invalid.</summary>
</member>
<member name="P:System.SR.InterpolationColorsColorBlendNotSet">
<summary>Property must be set to a valid ColorBlend object to use interpolation colors.</summary>
</member>
<member name="P:System.SR.InterpolationColorsCommon">
<summary>{0}{1} ColorBlend objects must be constructed with the same number of positions and color values. Positions must be between 0.0 and 1.0, 1.0 indicating the last element in the array.</summary>
</member>
<member name="P:System.SR.InterpolationColorsInvalidColorBlendObject">
<summary>ColorBlend object that was set is not valid.</summary>
</member>
<member name="P:System.SR.InterpolationColorsInvalidStartPosition">
<summary>Position's first element must be equal to 0.</summary>
</member>
<member name="P:System.SR.InterpolationColorsInvalidEndPosition">
<summary>Position's last element must be equal to 1.0.</summary>
</member>
<member name="P:System.SR.InterpolationColorsLength">
<summary>Array of colors and positions must contain at least two elements.</summary>
</member>
<member name="P:System.SR.InterpolationColorsLengthsDiffer">
<summary>Colors and positions do not have the same number of elements.</summary>
</member>
<member name="P:System.SR.InvalidArgumentValue">
<summary>Value of '{1}' is not valid for '{0}'.</summary>
</member>
<member name="P:System.SR.InvalidArgumentValueFontConverter">
<summary>Value of '{0}' is not valid for font size unit.</summary>
</member>
<member name="P:System.SR.InvalidBoundArgument">
<summary>Value of '{1}' is not valid for '{0}'. '{0}' should be greater than {2} and less than or equal to {3}.</summary>
</member>
<member name="P:System.SR.InvalidColor">
<summary>Color '{0}' is not valid.</summary>
</member>
<member name="P:System.SR.InvalidDashPattern">
<summary>DashPattern value is not valid.</summary>
</member>
<member name="P:System.SR.InvalidEx2BoundArgument">
<summary>Value of '{1}' is not valid for '{0}'. '{0}' should be greater than or equal to {2} and less than or equal to {3}.</summary>
</member>
<member name="P:System.SR.InvalidGDIHandle">
<summary>Win32 handle that was passed to {0} is not valid or is the wrong type.</summary>
</member>
<member name="P:System.SR.InvalidImage">
<summary>Image type is unknown.</summary>
</member>
<member name="P:System.SR.InvalidLowBoundArgumentEx">
<summary>Value of '{1}' is not valid for '{0}'. '{0}' must be greater than or equal to {2}.</summary>
</member>
<member name="P:System.SR.InvalidPermissionState">
<summary>Permission state is not valid.</summary>
</member>
<member name="P:System.SR.InvalidPictureType">
<summary>Argument '{0}' must be a picture that can be used as a {1}.</summary>
</member>
<member name="P:System.SR.InvalidPrinterException_InvalidPrinter">
<summary>Settings to access printer '{0}' are not valid.</summary>
</member>
<member name="P:System.SR.InvalidPrinterException_NoDefaultPrinter">
<summary>No printers are installed.</summary>
</member>
<member name="P:System.SR.InvalidPrinterHandle">
<summary>Handle {0} is not valid.</summary>
</member>
<member name="P:System.SR.ValidRangeX">
<summary>Parameter must be positive and &lt; Width.</summary>
</member>
<member name="P:System.SR.ValidRangeY">
<summary>Parameter must be positive and &lt; Height.</summary>
</member>
<member name="P:System.SR.NativeHandle0">
<summary>Native handle is 0.</summary>
</member>
<member name="P:System.SR.NoDefaultPrinter">
<summary>Default printer is not set.</summary>
</member>
<member name="P:System.SR.NotImplemented">
<summary>Not implemented.</summary>
</member>
<member name="P:System.SR.PDOCbeginPrintDescr">
<summary>Occurs when the document is about to be printed.</summary>
</member>
<member name="P:System.SR.PDOCdocumentNameDescr">
<summary>The name of the document shown to the user.</summary>
</member>
<member name="P:System.SR.PDOCdocumentPageSettingsDescr">
<summary>The page settings of the page currently being printed.</summary>
</member>
<member name="P:System.SR.PDOCendPrintDescr">
<summary>Occurs after the document has been printed.</summary>
</member>
<member name="P:System.SR.PDOCoriginAtMarginsDescr">
<summary>Indicates that the graphics origin is located at the user-specified page margins.</summary>
</member>
<member name="P:System.SR.PDOCprintControllerDescr">
<summary>Retrieves the print controller for this document.</summary>
</member>
<member name="P:System.SR.PDOCprintPageDescr">
<summary>Occurs once for each page to be printed.</summary>
</member>
<member name="P:System.SR.PDOCprinterSettingsDescr">
<summary>Retrieves the settings for the printer the document is currently being printed to.</summary>
</member>
<member name="P:System.SR.PDOCqueryPageSettingsDescr">
<summary>Occurs before each page is printed. Useful for changing PageSettings for a particular page.</summary>
</member>
<member name="P:System.SR.PlatformNotSupported_Unix">
<summary>System.Drawing.Common is not supported on non-Windows platforms. See https://aka.ms/systemdrawingnonwindows for more information.</summary>
</member>
<member name="P:System.SR.PrintDocumentDesc">
<summary>Defines an object that sends output to a printer.</summary>
</member>
<member name="P:System.SR.PropertyValueInvalidEntry">
<summary>IDictionary parameter contains at least one entry that is not valid. Ensure all values are consistent with the object's properties.</summary>
</member>
<member name="P:System.SR.PSizeNotCustom">
<summary>PaperSize cannot be changed unless the Kind property is set to Custom.</summary>
</member>
<member name="P:System.SR.ResourceNotFound">
<summary>Resource '{1}' cannot be found in class '{0}'.</summary>
</member>
<member name="P:System.SR.TextParseFailedFormat">
<summary>Text "{0}" cannot be parsed. The expected text format is "{1}".</summary>
</member>
<member name="P:System.SR.TriStateCompareError">
<summary>TriState.Default cannot be converted into a Boolean.</summary>
</member>
<member name="P:System.SR.toStringIcon">
<summary>(Icon)</summary>
</member>
<member name="P:System.SR.toStringNone">
<summary>(none)</summary>
</member>
<member name="P:System.SR.DCTypeInvalid">
<summary>GetObjectType on this dc returned an invalid value.</summary>
</member>
<member name="P:System.SR.InvalidEnumArgument">
<summary>The value of argument '{0}' ({1}) is invalid for Enum type '{2}'.</summary>
</member>
<member name="P:System.SR.ConvertInvalidPrimitive">
<summary>{0} is not a valid value for {1}.</summary>
</member>
<member name="P:System.SR.BlendObjectMustHaveTwoElements">
<summary>Invalid Blend object. It should have at least 2 elements in each of the factors and positions arrays.</summary>
</member>
<member name="P:System.SR.BlendObjectFirstElementInvalid">
<summary>Invalid Blend object. The positions array must have 0.0 as its first element.</summary>
</member>
<member name="P:System.SR.BlendObjectLastElementInvalid">
<summary>Invalid Blend object. The positions array must have 1.0 as its last element.</summary>
</member>
<member name="P:System.SR.AvailableOnlyOnWMF">
<summary>{0} only available on WMF files.</summary>
</member>
<member name="P:System.SR.CannotCreateGraphics">
<summary>Cannot create Graphics from an indexed bitmap.</summary>
</member>
<member name="P:System.SR.CouldNotOpenDisplay">
<summary>Could not open display (X-Server required. Check your DISPLAY environment variable)</summary>
</member>
<member name="P:System.SR.CouldntFindSpecifiedFile">
<summary>Couldn't find specified file.</summary>
</member>
<member name="P:System.SR.IconInstanceWasDisposed">
<summary>Icon instance was disposed.</summary>
</member>
<member name="P:System.SR.InvalidGraphicsUnit">
<summary>Invalid GraphicsUnit</summary>
</member>
<member name="P:System.SR.InvalidThumbnailSize">
<summary>Invalid thumbnail size</summary>
</member>
<member name="P:System.SR.NoCodecAvailableForFormat">
<summary>No codec available for format:{0}</summary>
</member>
<member name="P:System.SR.NotImplementedUnderX11">
<summary>Operation not implemented under X11</summary>
</member>
<member name="P:System.SR.none">
<summary>(none)</summary>
</member>
<member name="P:System.SR.NoValidIconImageFound">
<summary>No valid icon image found</summary>
</member>
<member name="P:System.SR.NullOrEmptyPath">
<summary>Null or empty path.</summary>
</member>
<member name="P:System.SR.NumberOfPointsAndTypesMustBeSame">
<summary>Invalid parameter passed. Number of points and types must be same.</summary>
</member>
<member name="P:System.SR.ObjectDisposed">
<summary>Object has been disposed.</summary>
</member>
<member name="P:System.SR.ValueLessThenZero">
<summary>The value of the {0} property is less than zero.</summary>
</member>
<member name="P:System.SR.ValueNotOneOfValues">
<summary>The value of the {0} property is not one of the {1} values</summary>
</member>
<member name="P:System.SR.TargetDirectoryDoesNotExist">
<summary>The directory {0} of the filename {1} does not exist.</summary>
</member>
<member name="P:System.SR.SystemDrawingCommon_PlatformNotSupported">
<summary>System.Drawing.Common is not supported on this platform.</summary>
</member>
<member name="T:System.Runtime.InteropServices.LibraryImportAttribute">
<summary>
Attribute used to indicate a source generator should create a function for marshalling
arguments instead of relying on the runtime to generate an equivalent marshalling function at run-time.
</summary>
<remarks>
This attribute is meaningless if the source generator associated with it is not enabled.
The current built-in source generator only supports C# and only supplies an implementation when
applied to static, partial, non-generic methods.
</remarks>
</member>
<member name="M:System.Runtime.InteropServices.LibraryImportAttribute.#ctor(System.String)">
<summary>
Initializes a new instance of the <see cref="T:System.Runtime.InteropServices.LibraryImportAttribute"/>.
</summary>
<param name="libraryName">Name of the library containing the import.</param>
</member>
<member name="P:System.Runtime.InteropServices.LibraryImportAttribute.LibraryName">
<summary>
Gets the name of the library containing the import.
</summary>
</member>
<member name="P:System.Runtime.InteropServices.LibraryImportAttribute.EntryPoint">
<summary>
Gets or sets the name of the entry point to be called.
</summary>
</member>
<member name="P:System.Runtime.InteropServices.LibraryImportAttribute.StringMarshalling">
<summary>
Gets or sets how to marshal string arguments to the method.
</summary>
<remarks>
If this field is set to a value other than <see cref="F:System.Runtime.InteropServices.StringMarshalling.Custom" />,
<see cref="P:System.Runtime.InteropServices.LibraryImportAttribute.StringMarshallingCustomType" /> must not be specified.
</remarks>
</member>
<member name="P:System.Runtime.InteropServices.LibraryImportAttribute.StringMarshallingCustomType">
<summary>
Gets or sets the <see cref="T:System.Type"/> used to control how string arguments to the method are marshalled.
</summary>
<remarks>
If this field is specified, <see cref="P:System.Runtime.InteropServices.LibraryImportAttribute.StringMarshalling" /> must not be specified
or must be set to <see cref="F:System.Runtime.InteropServices.StringMarshalling.Custom" />.
</remarks>
</member>
<member name="P:System.Runtime.InteropServices.LibraryImportAttribute.SetLastError">
<summary>
Gets or sets whether the callee sets an error (SetLastError on Windows or errno
on other platforms) before returning from the attributed method.
</summary>
</member>
<member name="T:System.Runtime.InteropServices.StringMarshalling">
<summary>
Specifies how strings should be marshalled for generated p/invokes
</summary>
</member>
<member name="F:System.Runtime.InteropServices.StringMarshalling.Custom">
<summary>
Indicates the user is suppling a specific marshaller in <see cref="P:System.Runtime.InteropServices.LibraryImportAttribute.StringMarshallingCustomType"/>.
</summary>
</member>
<member name="F:System.Runtime.InteropServices.StringMarshalling.Utf8">
<summary>
Use the platform-provided UTF-8 marshaller.
</summary>
</member>
<member name="F:System.Runtime.InteropServices.StringMarshalling.Utf16">
<summary>
Use the platform-provided UTF-16 marshaller.
</summary>
</member>
<member name="T:System.Runtime.Versioning.OSPlatformAttribute">
<summary>
Base type for all platform-specific API attributes.
</summary>
</member>
<member name="T:System.Runtime.Versioning.TargetPlatformAttribute">
<summary>
Records the platform that the project targeted.
</summary>
</member>
<member name="T:System.Runtime.Versioning.SupportedOSPlatformAttribute">
<summary>
Records the operating system (and minimum version) that supports an API. Multiple attributes can be
applied to indicate support on multiple operating systems.
</summary>
<remarks>
Callers can apply a <see cref="T:System.Runtime.Versioning.SupportedOSPlatformAttribute" />
or use guards to prevent calls to APIs on unsupported operating systems.
A given platform should only be specified once.
</remarks>
</member>
<member name="T:System.Runtime.Versioning.UnsupportedOSPlatformAttribute">
<summary>
Marks APIs that were removed in a given operating system version.
</summary>
<remarks>
Primarily used by OS bindings to indicate APIs that are only available in
earlier versions.
</remarks>
</member>
<member name="T:System.Runtime.Versioning.ObsoletedOSPlatformAttribute">
<summary>
Marks APIs that were obsoleted in a given operating system version.
</summary>
<remarks>
Primarily used by OS bindings to indicate APIs that should not be used anymore.
</remarks>
</member>
<member name="T:System.Runtime.Versioning.SupportedOSPlatformGuardAttribute">
<summary>
Annotates a custom guard field, property or method with a supported platform name and optional version.
Multiple attributes can be applied to indicate guard for multiple supported platforms.
</summary>
<remarks>
Callers can apply a <see cref="T:System.Runtime.Versioning.SupportedOSPlatformGuardAttribute" /> to a field, property or method
and use that field, property or method in a conditional or assert statements in order to safely call platform specific APIs.
The type of the field or property should be boolean, the method return type should be boolean in order to be used as platform guard.
</remarks>
</member>
<member name="T:System.Runtime.Versioning.UnsupportedOSPlatformGuardAttribute">
<summary>
Annotates the custom guard field, property or method with an unsupported platform name and optional version.
Multiple attributes can be applied to indicate guard for multiple unsupported platforms.
</summary>
<remarks>
Callers can apply a <see cref="T:System.Runtime.Versioning.UnsupportedOSPlatformGuardAttribute" /> to a field, property or method
and use that field, property or method in a conditional or assert statements as a guard to safely call APIs unsupported on those platforms.
The type of the field or property should be boolean, the method return type should be boolean in order to be used as platform guard.
</remarks>
</member>
</members>
</doc>
此文件类型无法预览
<?xml version="1.0" encoding="utf-8"?><doc>
<assembly>
<name>System.Memory</name>
</assembly>
<members>
<member name="T:System.Span`1">
<typeparam name="T"></typeparam>
</member>
<member name="M:System.Span`1.#ctor(`0[])">
<param name="array"></param>
</member>
<member name="M:System.Span`1.#ctor(System.Void*,System.Int32)">
<param name="pointer"></param>
<param name="length"></param>
</member>
<member name="M:System.Span`1.#ctor(`0[],System.Int32)">
<param name="array"></param>
<param name="start"></param>
</member>
<member name="M:System.Span`1.#ctor(`0[],System.Int32,System.Int32)">
<param name="array"></param>
<param name="start"></param>
<param name="length"></param>
</member>
<member name="M:System.Span`1.Clear">
</member>
<member name="M:System.Span`1.CopyTo(System.Span{`0})">
<param name="destination"></param>
</member>
<member name="M:System.Span`1.DangerousCreate(System.Object,`0@,System.Int32)">
<param name="obj"></param>
<param name="objectData"></param>
<param name="length"></param>
<returns></returns>
</member>
<member name="M:System.Span`1.DangerousGetPinnableReference">
<returns></returns>
</member>
<member name="P:System.Span`1.Empty">
<returns></returns>
</member>
<member name="M:System.Span`1.Equals(System.Object)">
<param name="obj"></param>
<returns></returns>
</member>
<member name="M:System.Span`1.Fill(`0)">
<param name="value"></param>
</member>
<member name="M:System.Span`1.GetHashCode">
<returns></returns>
</member>
<member name="P:System.Span`1.IsEmpty">
<returns></returns>
</member>
<member name="P:System.Span`1.Item(System.Int32)">
<param name="index"></param>
<returns></returns>
</member>
<member name="P:System.Span`1.Length">
<returns></returns>
</member>
<member name="M:System.Span`1.op_Equality(System.Span{`0},System.Span{`0})">
<param name="left"></param>
<param name="right"></param>
<returns></returns>
</member>
<member name="M:System.Span`1.op_Implicit(System.ArraySegment{T})~System.Span{T}">
<param name="arraySegment"></param>
<returns></returns>
</member>
<member name="M:System.Span`1.op_Implicit(System.Span{T})~System.ReadOnlySpan{T}">
<param name="span"></param>
<returns></returns>
</member>
<member name="M:System.Span`1.op_Implicit(T[])~System.Span{T}">
<param name="array"></param>
<returns></returns>
</member>
<member name="M:System.Span`1.op_Inequality(System.Span{`0},System.Span{`0})">
<param name="left"></param>
<param name="right"></param>
<returns></returns>
</member>
<member name="M:System.Span`1.Slice(System.Int32)">
<param name="start"></param>
<returns></returns>
</member>
<member name="M:System.Span`1.Slice(System.Int32,System.Int32)">
<param name="start"></param>
<param name="length"></param>
<returns></returns>
</member>
<member name="M:System.Span`1.ToArray">
<returns></returns>
</member>
<member name="M:System.Span`1.TryCopyTo(System.Span{`0})">
<param name="destination"></param>
<returns></returns>
</member>
<member name="T:System.SpanExtensions">
</member>
<member name="M:System.SpanExtensions.AsBytes``1(System.ReadOnlySpan{``0})">
<param name="source"></param>
<typeparam name="T"></typeparam>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.AsBytes``1(System.Span{``0})">
<param name="source"></param>
<typeparam name="T"></typeparam>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.AsSpan(System.String)">
<param name="text"></param>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.AsSpan``1(System.ArraySegment{``0})">
<param name="arraySegment"></param>
<typeparam name="T"></typeparam>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.AsSpan``1(``0[])">
<param name="array"></param>
<typeparam name="T"></typeparam>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.CopyTo``1(``0[],System.Span{``0})">
<param name="array"></param>
<param name="destination"></param>
<typeparam name="T"></typeparam>
</member>
<member name="M:System.SpanExtensions.IndexOf(System.Span{System.Byte},System.ReadOnlySpan{System.Byte})">
<param name="span"></param>
<param name="value"></param>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.IndexOf(System.Span{System.Byte},System.Byte)">
<param name="span"></param>
<param name="value"></param>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.IndexOf(System.ReadOnlySpan{System.Byte},System.Byte)">
<param name="span"></param>
<param name="value"></param>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.IndexOf(System.ReadOnlySpan{System.Byte},System.ReadOnlySpan{System.Byte})">
<param name="span"></param>
<param name="value"></param>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.IndexOf``1(System.ReadOnlySpan{``0},System.ReadOnlySpan{``0})">
<param name="span"></param>
<param name="value"></param>
<typeparam name="T"></typeparam>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.IndexOf``1(System.ReadOnlySpan{``0},``0)">
<param name="span"></param>
<param name="value"></param>
<typeparam name="T"></typeparam>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.IndexOf``1(System.Span{``0},System.ReadOnlySpan{``0})">
<param name="span"></param>
<param name="value"></param>
<typeparam name="T"></typeparam>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.IndexOf``1(System.Span{``0},``0)">
<param name="span"></param>
<param name="value"></param>
<typeparam name="T"></typeparam>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.IndexOfAny(System.ReadOnlySpan{System.Byte},System.Byte,System.Byte,System.Byte)">
<param name="span"></param>
<param name="value0"></param>
<param name="value1"></param>
<param name="value2"></param>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.IndexOfAny(System.Span{System.Byte},System.Byte,System.Byte,System.Byte)">
<param name="span"></param>
<param name="value0"></param>
<param name="value1"></param>
<param name="value2"></param>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.IndexOfAny(System.Span{System.Byte},System.Byte,System.Byte)">
<param name="span"></param>
<param name="value0"></param>
<param name="value1"></param>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.IndexOfAny(System.ReadOnlySpan{System.Byte},System.ReadOnlySpan{System.Byte})">
<param name="span"></param>
<param name="values"></param>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.IndexOfAny(System.Span{System.Byte},System.ReadOnlySpan{System.Byte})">
<param name="span"></param>
<param name="values"></param>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.IndexOfAny(System.ReadOnlySpan{System.Byte},System.Byte,System.Byte)">
<param name="span"></param>
<param name="value0"></param>
<param name="value1"></param>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.NonPortableCast``2(System.ReadOnlySpan{``0})">
<param name="source"></param>
<typeparam name="TFrom"></typeparam>
<typeparam name="TTo"></typeparam>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.NonPortableCast``2(System.Span{``0})">
<param name="source"></param>
<typeparam name="TFrom"></typeparam>
<typeparam name="TTo"></typeparam>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.SequenceEqual(System.ReadOnlySpan{System.Byte},System.ReadOnlySpan{System.Byte})">
<param name="first"></param>
<param name="second"></param>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.SequenceEqual(System.Span{System.Byte},System.ReadOnlySpan{System.Byte})">
<param name="first"></param>
<param name="second"></param>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.SequenceEqual``1(System.ReadOnlySpan{``0},System.ReadOnlySpan{``0})">
<param name="first"></param>
<param name="second"></param>
<typeparam name="T"></typeparam>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.SequenceEqual``1(System.Span{``0},System.ReadOnlySpan{``0})">
<param name="first"></param>
<param name="second"></param>
<typeparam name="T"></typeparam>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.StartsWith(System.ReadOnlySpan{System.Byte},System.ReadOnlySpan{System.Byte})">
<param name="span"></param>
<param name="value"></param>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.StartsWith(System.Span{System.Byte},System.ReadOnlySpan{System.Byte})">
<param name="span"></param>
<param name="value"></param>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.StartsWith``1(System.ReadOnlySpan{``0},System.ReadOnlySpan{``0})">
<param name="span"></param>
<param name="value"></param>
<typeparam name="T"></typeparam>
<returns></returns>
</member>
<member name="M:System.SpanExtensions.StartsWith``1(System.Span{``0},System.ReadOnlySpan{``0})">
<param name="span"></param>
<param name="value"></param>
<typeparam name="T"></typeparam>
<returns></returns>
</member>
<member name="T:System.ReadOnlySpan`1">
<typeparam name="T"></typeparam>
</member>
<member name="M:System.ReadOnlySpan`1.#ctor(`0[])">
<param name="array"></param>
</member>
<member name="M:System.ReadOnlySpan`1.#ctor(System.Void*,System.Int32)">
<param name="pointer"></param>
<param name="length"></param>
</member>
<member name="M:System.ReadOnlySpan`1.#ctor(`0[],System.Int32)">
<param name="array"></param>
<param name="start"></param>
</member>
<member name="M:System.ReadOnlySpan`1.#ctor(`0[],System.Int32,System.Int32)">
<param name="array"></param>
<param name="start"></param>
<param name="length"></param>
</member>
<member name="M:System.ReadOnlySpan`1.CopyTo(System.Span{`0})">
<param name="destination"></param>
</member>
<member name="M:System.ReadOnlySpan`1.DangerousCreate(System.Object,`0@,System.Int32)">
<param name="obj"></param>
<param name="objectData"></param>
<param name="length"></param>
<returns></returns>
</member>
<member name="M:System.ReadOnlySpan`1.DangerousGetPinnableReference">
<returns></returns>
</member>
<member name="P:System.ReadOnlySpan`1.Empty">
<returns></returns>
</member>
<member name="M:System.ReadOnlySpan`1.Equals(System.Object)">
<param name="obj"></param>
<returns></returns>
</member>
<member name="M:System.ReadOnlySpan`1.GetHashCode">
<returns></returns>
</member>
<member name="P:System.ReadOnlySpan`1.IsEmpty">
<returns></returns>
</member>
<member name="P:System.ReadOnlySpan`1.Item(System.Int32)">
<param name="index"></param>
<returns></returns>
</member>
<member name="P:System.ReadOnlySpan`1.Length">
<returns></returns>
</member>
<member name="M:System.ReadOnlySpan`1.op_Equality(System.ReadOnlySpan{`0},System.ReadOnlySpan{`0})">
<param name="left"></param>
<param name="right"></param>
<returns></returns>
</member>
<member name="M:System.ReadOnlySpan`1.op_Implicit(System.ArraySegment{T})~System.ReadOnlySpan{T}">
<param name="arraySegment"></param>
<returns></returns>
</member>
<member name="M:System.ReadOnlySpan`1.op_Implicit(T[])~System.ReadOnlySpan{T}">
<param name="array"></param>
<returns></returns>
</member>
<member name="M:System.ReadOnlySpan`1.op_Inequality(System.ReadOnlySpan{`0},System.ReadOnlySpan{`0})">
<param name="left"></param>
<param name="right"></param>
<returns></returns>
</member>
<member name="M:System.ReadOnlySpan`1.Slice(System.Int32)">
<param name="start"></param>
<returns></returns>
</member>
<member name="M:System.ReadOnlySpan`1.Slice(System.Int32,System.Int32)">
<param name="start"></param>
<param name="length"></param>
<returns></returns>
</member>
<member name="M:System.ReadOnlySpan`1.ToArray">
<returns></returns>
</member>
<member name="M:System.ReadOnlySpan`1.TryCopyTo(System.Span{`0})">
<param name="destination"></param>
<returns></returns>
</member>
</members>
</doc>
\ No newline at end of file \ No newline at end of file
此文件类型无法预览
此文件的差异太大,无法显示。
<?xml version="1.0" encoding="utf-8"?>
<doc>
<assembly>
<name>System.Runtime.CompilerServices.Unsafe</name>
</assembly>
<members>
<member name="T:System.Runtime.CompilerServices.Unsafe">
<summary>Contains generic, low-level functionality for manipulating pointers.</summary>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.Add``1(``0@,System.Int32)">
<summary>Adds an element offset to the given reference.</summary>
<param name="source">The reference to add the offset to.</param>
<param name="elementOffset">The offset to add.</param>
<typeparam name="T">The type of reference.</typeparam>
<returns>A new reference that reflects the addition of offset to pointer.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.Add``1(``0@,System.IntPtr)">
<summary>Adds an element offset to the given reference.</summary>
<param name="source">The reference to add the offset to.</param>
<param name="elementOffset">The offset to add.</param>
<typeparam name="T">The type of reference.</typeparam>
<returns>A new reference that reflects the addition of offset to pointer.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.Add``1(``0@,System.UIntPtr)">
<summary>Adds an element offset to the given reference.</summary>
<param name="source">The reference to add the offset to.</param>
<param name="elementOffset">The offset to add.</param>
<typeparam name="T">The type of reference.</typeparam>
<returns>A new reference that reflects the addition of offset to pointer.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.Add``1(System.Void*,System.Int32)">
<summary>Adds an element offset to the given void pointer.</summary>
<param name="source">The void pointer to add the offset to.</param>
<param name="elementOffset">The offset to add.</param>
<typeparam name="T">The type of void pointer.</typeparam>
<returns>A new void pointer that reflects the addition of offset to the specified pointer.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.AddByteOffset``1(``0@,System.IntPtr)">
<summary>Adds a byte offset to the given reference.</summary>
<param name="source">The reference to add the offset to.</param>
<param name="byteOffset">The offset to add.</param>
<typeparam name="T">The type of reference.</typeparam>
<returns>A new reference that reflects the addition of byte offset to pointer.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.AddByteOffset``1(``0@,System.UIntPtr)">
<summary>Adds a byte offset to the given reference.</summary>
<param name="source">The reference to add the offset to.</param>
<param name="byteOffset">The offset to add.</param>
<typeparam name="T">The type of reference.</typeparam>
<returns>A new reference that reflects the addition of byte offset to pointer.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.AreSame``1(``0@,``0@)">
<summary>Determines whether the specified references point to the same location.</summary>
<param name="left">The first reference to compare.</param>
<param name="right">The second reference to compare.</param>
<typeparam name="T">The type of reference.</typeparam>
<returns>
<see langword="true" /> if <paramref name="left" /> and <paramref name="right" /> point to the same location; otherwise, <see langword="false" />.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.As``1(System.Object)">
<summary>Casts the given object to the specified type.</summary>
<param name="o">The object to cast.</param>
<typeparam name="T">The type which the object will be cast to.</typeparam>
<returns>The original object, casted to the given type.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.As``2(``0@)">
<summary>Reinterprets the given reference as a reference to a value of type <typeparamref name="TTo" />.</summary>
<param name="source">The reference to reinterpret.</param>
<typeparam name="TFrom">The type of reference to reinterpret.</typeparam>
<typeparam name="TTo">The desired type of the reference.</typeparam>
<returns>A reference to a value of type <typeparamref name="TTo" />.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.AsPointer``1(``0@)">
<summary>Returns a pointer to the given by-ref parameter.</summary>
<param name="value">The object whose pointer is obtained.</param>
<typeparam name="T">The type of object.</typeparam>
<returns>A pointer to the given value.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.AsRef``1(``0@)">
<summary>Reinterprets the given read-only reference as a reference.</summary>
<param name="source">The read-only reference to reinterpret.</param>
<typeparam name="T">The type of reference.</typeparam>
<returns>A reference to a value of type <typeparamref name="T" />.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.AsRef``1(System.Void*)">
<summary>Reinterprets the given location as a reference to a value of type <typeparamref name="T" />.</summary>
<param name="source">The location of the value to reference.</param>
<typeparam name="T">The type of the interpreted location.</typeparam>
<returns>A reference to a value of type <typeparamref name="T" />.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.ByteOffset``1(``0@,``0@)">
<summary>Determines the byte offset from origin to target from the given references.</summary>
<param name="origin">The reference to origin.</param>
<param name="target">The reference to target.</param>
<typeparam name="T">The type of reference.</typeparam>
<returns>Byte offset from origin to target i.e. <paramref name="target" /> - <paramref name="origin" />.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.Copy``1(``0@,System.Void*)">
<summary>Copies a value of type <typeparamref name="T" /> to the given location.</summary>
<param name="destination">The location to copy to.</param>
<param name="source">A pointer to the value to copy.</param>
<typeparam name="T">The type of value to copy.</typeparam>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.Copy``1(System.Void*,``0@)">
<summary>Copies a value of type <typeparamref name="T" /> to the given location.</summary>
<param name="destination">The location to copy to.</param>
<param name="source">A reference to the value to copy.</param>
<typeparam name="T">The type of value to copy.</typeparam>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.CopyBlock(System.Byte@,System.Byte@,System.UInt32)">
<summary>Copies bytes from the source address to the destination address.</summary>
<param name="destination">The destination address to copy to.</param>
<param name="source">The source address to copy from.</param>
<param name="byteCount">The number of bytes to copy.</param>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.CopyBlock(System.Void*,System.Void*,System.UInt32)">
<summary>Copies bytes from the source address to the destination address.</summary>
<param name="destination">The destination address to copy to.</param>
<param name="source">The source address to copy from.</param>
<param name="byteCount">The number of bytes to copy.</param>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.CopyBlockUnaligned(System.Byte@,System.Byte@,System.UInt32)">
<summary>Copies bytes from the source address to the destination address without assuming architecture dependent alignment of the addresses.</summary>
<param name="destination">The destination address to copy to.</param>
<param name="source">The source address to copy from.</param>
<param name="byteCount">The number of bytes to copy.</param>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.CopyBlockUnaligned(System.Void*,System.Void*,System.UInt32)">
<summary>Copies bytes from the source address to the destination address without assuming architecture dependent alignment of the addresses.</summary>
<param name="destination">The destination address to copy to.</param>
<param name="source">The source address to copy from.</param>
<param name="byteCount">The number of bytes to copy.</param>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.InitBlock(System.Byte@,System.Byte,System.UInt32)">
<summary>Initializes a block of memory at the given location with a given initial value.</summary>
<param name="startAddress">The address of the start of the memory block to initialize.</param>
<param name="value">The value to initialize the block to.</param>
<param name="byteCount">The number of bytes to initialize.</param>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.InitBlock(System.Void*,System.Byte,System.UInt32)">
<summary>Initializes a block of memory at the given location with a given initial value.</summary>
<param name="startAddress">The address of the start of the memory block to initialize.</param>
<param name="value">The value to initialize the block to.</param>
<param name="byteCount">The number of bytes to initialize.</param>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.InitBlockUnaligned(System.Byte@,System.Byte,System.UInt32)">
<summary>Initializes a block of memory at the given location with a given initial value without assuming architecture dependent alignment of the address.</summary>
<param name="startAddress">The address of the start of the memory block to initialize.</param>
<param name="value">The value to initialize the block to.</param>
<param name="byteCount">The number of bytes to initialize.</param>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.InitBlockUnaligned(System.Void*,System.Byte,System.UInt32)">
<summary>Initializes a block of memory at the given location with a given initial value without assuming architecture dependent alignment of the address.</summary>
<param name="startAddress">The address of the start of the memory block to initialize.</param>
<param name="value">The value to initialize the block to.</param>
<param name="byteCount">The number of bytes to initialize.</param>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.IsAddressGreaterThan``1(``0@,``0@)">
<summary>Returns a value that indicates whether a specified reference is greater than another specified reference.</summary>
<param name="left">The first value to compare.</param>
<param name="right">The second value to compare.</param>
<typeparam name="T">The type of the reference.</typeparam>
<returns>
<see langword="true" /> if <paramref name="left" /> is greater than <paramref name="right" />; otherwise, <see langword="false" />.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.IsAddressLessThan``1(``0@,``0@)">
<summary>Returns a value that indicates whether a specified reference is less than another specified reference.</summary>
<param name="left">The first value to compare.</param>
<param name="right">The second value to compare.</param>
<typeparam name="T">The type of the reference.</typeparam>
<returns>
<see langword="true" /> if <paramref name="left" /> is less than <paramref name="right" />; otherwise, <see langword="false" />.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.IsNullRef``1(``0@)">
<summary>Determines if a given reference to a value of type <typeparamref name="T" /> is a null reference.</summary>
<param name="source">The reference to check.</param>
<typeparam name="T">The type of the reference.</typeparam>
<returns>
<see langword="true" /> if <paramref name="source" /> is a null reference; otherwise, <see langword="false" />.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.NullRef``1">
<summary>Returns a reference to a value of type <typeparamref name="T" /> that is a null reference.</summary>
<typeparam name="T">The type of the reference.</typeparam>
<returns>A reference to a value of type <typeparamref name="T" /> that is a null reference.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.Read``1(System.Void*)">
<summary>Reads a value of type <typeparamref name="T" /> from the given location.</summary>
<param name="source">The location to read from.</param>
<typeparam name="T">The type to read.</typeparam>
<returns>An object of type <typeparamref name="T" /> read from the given location.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.ReadUnaligned``1(System.Byte@)">
<summary>Reads a value of type <typeparamref name="T" /> from the given location without assuming architecture dependent alignment of the addresses.</summary>
<param name="source">The location to read from.</param>
<typeparam name="T">The type to read.</typeparam>
<returns>An object of type <typeparamref name="T" /> read from the given location.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.ReadUnaligned``1(System.Void*)">
<summary>Reads a value of type <typeparamref name="T" /> from the given location without assuming architecture dependent alignment of the addresses.</summary>
<param name="source">The location to read from.</param>
<typeparam name="T">The type to read.</typeparam>
<returns>An object of type <typeparamref name="T" /> read from the given location.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.SizeOf``1">
<summary>Returns the size of an object of the given type parameter.</summary>
<typeparam name="T">The type of object whose size is retrieved.</typeparam>
<returns>The size of an object of type <typeparamref name="T" />.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.SkipInit``1(``0@)">
<summary>Bypasses definite assignment rules for a given value.</summary>
<param name="value">The uninitialized object.</param>
<typeparam name="T">The type of the uninitialized object.</typeparam>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.Subtract``1(``0@,System.Int32)">
<summary>Subtracts an element offset from the given reference.</summary>
<param name="source">The reference to subtract the offset from.</param>
<param name="elementOffset">The offset to subtract.</param>
<typeparam name="T">The type of reference.</typeparam>
<returns>A new reference that reflects the subtraction of offset from pointer.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.Subtract``1(``0@,System.IntPtr)">
<summary>Subtracts an element offset from the given reference.</summary>
<param name="source">The reference to subtract the offset from.</param>
<param name="elementOffset">The offset to subtract.</param>
<typeparam name="T">The type of reference.</typeparam>
<returns>A new reference that reflects the subtraction of offset from pointer.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.Subtract``1(``0@,System.UIntPtr)">
<summary>Subtracts an element offset from the given reference.</summary>
<param name="source">The reference to subtract the offset from.</param>
<param name="elementOffset">The offset to subtract.</param>
<typeparam name="T">The type of reference.</typeparam>
<returns>A new reference that reflects the subraction of offset from pointer.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.Subtract``1(System.Void*,System.Int32)">
<summary>Subtracts an element offset from the given void pointer.</summary>
<param name="source">The void pointer to subtract the offset from.</param>
<param name="elementOffset">The offset to subtract.</param>
<typeparam name="T">The type of the void pointer.</typeparam>
<returns>A new void pointer that reflects the subtraction of offset from the specified pointer.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.SubtractByteOffset``1(``0@,System.IntPtr)">
<summary>Subtracts a byte offset from the given reference.</summary>
<param name="source">The reference to subtract the offset from.</param>
<param name="byteOffset">The offset to subtract.</param>
<typeparam name="T">The type of reference.</typeparam>
<returns>A new reference that reflects the subtraction of byte offset from pointer.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.SubtractByteOffset``1(``0@,System.UIntPtr)">
<summary>Subtracts a byte offset from the given reference.</summary>
<param name="source">The reference to subtract the offset from.</param>
<param name="byteOffset">The offset to subtract.</param>
<typeparam name="T">The type of reference.</typeparam>
<returns>A new reference that reflects the subraction of byte offset from pointer.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.Unbox``1(System.Object)">
<summary>Returns a <see langword="mutable ref" /> to a boxed value.</summary>
<param name="box">The value to unbox.</param>
<typeparam name="T">The type to be unboxed.</typeparam>
<exception cref="T:System.NullReferenceException">
<paramref name="box" /> is <see langword="null" />, and <typeparamref name="T" /> is a non-nullable value type.</exception>
<exception cref="T:System.InvalidCastException">
<paramref name="box" /> is not a boxed value type.
-or-
<paramref name="box" /> is not a boxed <typeparamref name="T" />.</exception>
<exception cref="T:System.TypeLoadException">
<typeparamref name="T" /> cannot be found.</exception>
<returns>A <see langword="mutable ref" /> to the boxed value <paramref name="box" />.</returns>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.Write``1(System.Void*,``0)">
<summary>Writes a value of type <typeparamref name="T" /> to the given location.</summary>
<param name="destination">The location to write to.</param>
<param name="value">The value to write.</param>
<typeparam name="T">The type of value to write.</typeparam>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.WriteUnaligned``1(System.Byte@,``0)">
<summary>Writes a value of type <typeparamref name="T" /> to the given location without assuming architecture dependent alignment of the addresses.</summary>
<param name="destination">The location to write to.</param>
<param name="value">The value to write.</param>
<typeparam name="T">The type of value to write.</typeparam>
</member>
<member name="M:System.Runtime.CompilerServices.Unsafe.WriteUnaligned``1(System.Void*,``0)">
<summary>Writes a value of type <typeparamref name="T" /> to the given location without assuming architecture dependent alignment of the addresses.</summary>
<param name="destination">The location to write to.</param>
<param name="value">The value to write.</param>
<typeparam name="T">The type of value to write.</typeparam>
</member>
</members>
</doc>
\ No newline at end of file \ No newline at end of file
此文件太大,无法显示。
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!