c#窗体应用程序实现当软件开启,定时器就在数据库扫描是否有设置的良品和不良品条码的当天ICT测试记录(ICT_test表中Barcode,Date,Result)),良品和不良品条码在本地文件夹txt文件中获取。如果数据库存在当天良品和不良品ICT测试记录,lable状态栏变绿并提示“已点检,请进行ICT测试”进行别的条码的ICT测试。如果没有测试记录,label状态栏变红,并提示“请进行测试前点检”,然后就先进行设置条码的ICT测试,判断扫描到txt_Barcode条码是否为获取到txt文件中设置的良品或不良品条码,如输入的条码都不符合,label状态栏变红,并提示“条码错误”,如输入的条码正确并为设置的良品条码,label状态栏变绿,并提升“请进行良品点检”,这时就将扫到的良品条码通过模拟键盘复制黏贴到ICT条码栏,进行ICT测试,测试完成后就提示“良品点检完成”。如扫描的是设置的不良品条码,则label状态栏变绿,并提示“请进行不良品点检”,这时就将扫描到的不良品条码通过模拟键盘复制黏贴到ICT条码栏,进行ICT测试。当扫描到某一文件夹中生成这两个条码的测试报告,label状态栏变绿,并提示“点检完成”,并将文件名中的测试信息(条码,时间,产品(良品、不良品),结果)写入DateGridView组件中代码实现
时间: 2023-11-09 11:07:39 浏览: 158
首先,需要在窗体中添加一个定时器控件,设置定时器的时间间隔为需要扫描数据库和文件夹的时间间隔。
在定时器的 Tick 事件中,需要进行以下操作:
1. 扫描数据库,判断是否存在当天的良品和不良品测试记录。可以使用 ADO.NET 连接数据库并查询。
2. 如果存在测试记录,则将 label 状态栏变为绿色,并提示“已点检,请进行ICT测试”。
3. 如果不存在测试记录,则将 label 状态栏变为红色,并提示“请进行测试前点检”。
4. 当扫描到条码时,需要判断扫描到的条码是否为设置的良品或不良品条码。可以将良品和不良品条码存储在本地的 txt 文件中,使用 StreamReader 类读取文件内容,并将每行的条码存储在 List 中。
5. 如果输入的条码都不符合,label 状态栏变为红色,并提示“条码错误”。
6. 如果输入的条码正确并为设置的良品条码,label 状态栏变绿,并提示“请进行良品点检”。
7. 如果输入的条码正确并为设置的不良品条码,label 状态栏变绿,并提示“请进行不良品点检”。
8. 将扫描到的条码通过模拟键盘复制黏贴到 ICT 条码栏,进行 ICT 测试。
9. 当扫描到某一文件夹中生成这两个条码的测试报告时,label 状态栏变为绿色,并提示“点检完成”。可以使用 FileSystemWatcher 类监控文件夹中文件的创建事件,并在事件处理程序中进行处理。
10. 将文件名中的测试信息(条码,时间,产品(良品、不良品),结果)写入 DataGridView 组件中。可以使用 DataGridView 的 Rows 和 Cells 属性添加行和单元格,并将测试信息写入对应的单元格中。
以下是示例代码:
```csharp
private List<string> goodBarcodes = new List<string>(); // 存储良品条码
private List<string> badBarcodes = new List<string>(); // 存储不良品条码
private void Form1_Load(object sender, EventArgs e)
{
// 读取良品和不良品条码文件
using (StreamReader sr = new StreamReader("goodBarcodes.txt"))
{
while (!sr.EndOfStream)
{
goodBarcodes.Add(sr.ReadLine());
}
}
using (StreamReader sr = new StreamReader("badBarcodes.txt"))
{
while (!sr.EndOfStream)
{
badBarcodes.Add(sr.ReadLine());
}
}
// 启动定时器
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
// 扫描数据库,判断是否存在当天的良品和不良品测试记录
bool hasGoodRecord = CheckDatabaseForRecord("good");
bool hasBadRecord = CheckDatabaseForRecord("bad");
if (hasGoodRecord || hasBadRecord)
{
// 存在测试记录,将 label 状态栏变为绿色,并提示“已点检,请进行ICT测试”
label1.BackColor = Color.Green;
label1.Text = "已点检,请进行ICT测试";
}
else
{
// 不存在测试记录,将 label 状态栏变为红色,并提示“请进行测试前点检”
label1.BackColor = Color.Red;
label1.Text = "请进行测试前点检";
}
}
private bool CheckDatabaseForRecord(string type)
{
// 使用 ADO.NET 连接数据库并查询当天的测试记录
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = new SqlCommand($"SELECT COUNT(*) FROM ICT_test WHERE Date = '{DateTime.Today.ToString("yyyy-MM-dd")}' AND Result = '{type}'", connection);
int count = (int)command.ExecuteScalar();
return count > 0;
}
}
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
string barcode = textBox1.Text.Trim();
if (goodBarcodes.Contains(barcode))
{
// 输入的是良品条码,将 label 状态栏变为绿色,并提示“请进行良品点检”
label1.BackColor = Color.Green;
label1.Text = "请进行良品点检";
// 模拟键盘复制黏贴到 ICT 条码栏
SendKeys.SendWait("^c");
SendKeys.SendWait("{TAB}");
SendKeys.SendWait("^v");
// 进行 ICT 测试
DoICTTest("good");
}
else if (badBarcodes.Contains(barcode))
{
// 输入的是不良品条码,将 label 状态栏变为绿色,并提示“请进行不良品点检”
label1.BackColor = Color.Green;
label1.Text = "请进行不良品点检";
// 模拟键盘复制黏贴到 ICT 条码栏
SendKeys.SendWait("^c");
SendKeys.SendWait("{TAB}");
SendKeys.SendWait("^v");
// 进行 ICT 测试
DoICTTest("bad");
}
else
{
// 输入的条码错误,将 label 状态栏变为红色,并提示“条码错误”
label1.BackColor = Color.Red;
label1.Text = "条码错误";
}
textBox1.Clear();
}
}
private void DoICTTest(string type)
{
// 进行 ICT 测试
// ...
// 监控文件夹,等待测试报告生成
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = @"C:\TestReports";
watcher.Filter = "*.txt";
watcher.Created += (s, e) =>
{
string fileName = e.FullPath;
string barcode = GetBarcodeFromFileName(fileName);
DateTime date = GetDateFromFileName(fileName);
string result = GetResultFromFileName(fileName);
// 将测试信息写入 DataGridView 组件中
dataGridView1.Rows.Add(barcode, date.ToString(), type, result);
// 将 label 状态栏变为绿色,并提示“点检完成”
label1.BackColor = Color.Green;
label1.Text = "点检完成";
};
watcher.EnableRaisingEvents = true;
}
private string GetBarcodeFromFileName(string fileName)
{
// 从文件名中获取条码
// ...
}
private DateTime GetDateFromFileName(string fileName)
{
// 从文件名中获取测试时间
// ...
}
private string GetResultFromFileName(string fileName)
{
// 从文件名中获取测试结果
// ...
}
```
阅读全文