if (File.ReadAllLines(goodBarcodeFile).Contains(barcode)) { // 良品条码 lb_test_state.Text = "请进行良品点检"; lb_test_state.BackColor = System.Drawing.Color.Green; // 在这里进行ICT测试 // ... // 检查是否有良品测试报告生成 if (Directory.GetFiles(@"D:\ICT_test result\", "*PASS.dcl").Any()) { // 良品测试完成 lb_test_state.Text = "良品点检完成"; lb_test_state.BackColor = System.Drawing.Color.Green;在以上代码基础上修改,当发现相应文件夹有相应点检报告产生,label状态栏立马做出相应变化
时间: 2024-01-12 22:02:59 浏览: 23
可以在代码中添加一个循环,不断检查指定文件夹中是否有相应的测试报告文件生成。当检测到文件时,即可更新 label 的状态。
具体代码如下:
```
while (true)
{
if (Directory.GetFiles(@"D:\ICT_test result\", "*PASS.dcl").Any())
{
// 良品测试完成
lb_test_state.Text = "良品点检完成";
lb_test_state.BackColor = System.Drawing.Color.Green;
break;
}
Thread.Sleep(1000); // 暂停 1 秒钟后再次检查
}
```
在这个示例中,我们使用了一个无限循环来不断检查文件夹中是否有相应文件生成。如果找到了相应文件,就更新 label 的状态,并退出循环。为了防止循环过于频繁地运行,我们在每次检查后暂停了 1 秒钟。
相关问题
if (count == 0) { // 条码错误 lb_test_state.BackColor = Color.Red; lb_test_state.Text = "条码错误 "; { // 良品或不良品点检 if (goodBarcodeList.Contains(barcode)) { lb_test_state.BackColor = Color.Yellow; lb_test_state.Text = "请进行良品点检"; } else if (badBarcodeList.Contains(barcode)) { lb_test_state.BackColor = Color.Yellow; lb_test_state.Text = "请进行不良品点检"; }在此代码基础上修改,如果实时监控到文件夹有良品点检报告生成(良品条码的测试报告txt文件),则label状态栏变绿,并提示“良品点检完成”。如果实时监控到文件夹有不良品点检报告生成(不良品条码的测试报告txt文件,同良品点检报告在一个文件夹,只是文件后缀不同),则label状态栏变绿,并提示“不良品点检完成”。并将测试数据更新到数据库。当在数据库发现有这两条测试记录,表面点检完成。之后扫描到的条码不再受限制,不再提示条码错误
以下是修改后的代码:
```
private bool isGoodChecked = false; // 是否完成良品点检
private bool isBadChecked = false; // 是否完成不良品点检
// 监控文件夹的路径
private string folderPath = "文件夹路径";
private FileSystemWatcher watcher;
private void Form1_Load(object sender, EventArgs e)
{
// 创建文件夹监控实例
watcher = new FileSystemWatcher();
watcher.Path = folderPath;
watcher.Filter = "*.txt";
watcher.Created += new FileSystemEventHandler(OnFileCreated);
watcher.EnableRaisingEvents = true;
}
private void OnFileCreated(object source, FileSystemEventArgs e)
{
string fileName = e.Name;
string[] parts = fileName.Split('_');
string barcode = parts[1];
if (fileName.StartsWith("goodBarcode_"))
{
// 如果是良品点检报告
lb_test_state.BackColor = Color.Green;
lb_test_state.Text = "良品点检完成";
isGoodChecked = true;
UpdateDatabase(barcode);
}
else if (fileName.StartsWith("badBarcode_"))
{
// 如果是不良品点检报告
lb_test_state.BackColor = Color.Green;
lb_test_state.Text = "不良品点检完成";
isBadChecked = true;
UpdateDatabase(barcode);
}
CheckTestComplete();
}
private void CheckTestComplete()
{
// 如果两种点检都完成,则解除条码限制
if (isGoodChecked && isBadChecked)
{
goodBarcodeList.Clear();
badBarcodeList.Clear();
isGoodChecked = false;
isBadChecked = false;
}
}
private void UpdateDatabase(string barcode)
{
// 更新数据库
// ...
}
private void btn_test_Click(object sender, EventArgs e)
{
string barcode = tb_barcode.Text;
if (goodBarcodeList.Contains(barcode))
{
lb_test_state.BackColor = Color.Yellow;
lb_test_state.Text = "请进行良品点检";
}
else if (badBarcodeList.Contains(barcode))
{
lb_test_state.BackColor = Color.Yellow;
lb_test_state.Text = "请进行不良品点检";
}
else
{
lb_test_state.BackColor = Color.Red;
lb_test_state.Text = "条码错误";
}
}
```
在代码中添加了两个变量isGoodChecked和isBadChecked,用于记录良品点检和不良品点检是否完成。在文件夹监控事件中,如果发现良品点检或不良品点检报告生成,则更新label状态栏,并将对应的变量设置为true,同时更新数据库。在CheckTestComplete方法中检查两种点检是否都完成,如果都完成则解除条码限制。在btn_test_Click方法中,如果扫描到的是良品或不良品条码,则提示进行点检,否则提示条码错误。
if (e.KeyCode == Keys.Enter) { // 判断条码是否为设置的良品或不良品条码 string barcode = txt_barcode.Text.Trim(); string connectionString = @"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = db.accdb;Jet OLEDB:Database Password = @maruhi"; using (OleDbConnection connection = new OleDbConnection(connectionString)) { connection.Open(); OleDbCommand command = new OleDbCommand("SELECT COUNT(*) FROM ICT_test WHERE Date=@date AND Barcode=@barcode AND Result='OK'", connection); command.Parameters.AddWithValue("@date", DateTime.Now.ToString("yyyy-MM-dd")); command.Parameters.AddWithValue("@barcode", barcode); int count = (int)command.ExecuteScalar(); if (count == 0) { // 条码错误 lb_test_state.BackColor = Color.Red; lb_test_state.Text = "条码错误 "; { // 良品或不良品点检 if (goodBarcodeList.Contains(barcode)) { lb_test_state.BackColor = Color.Yellow; lb_test_state.Text = "请进行良品点检"; SendBarcode(); } else if (badBarcodeList.Contains(barcode)) { lb_test_state.BackColor = Color.Yellow; lb_test_state.Text = "请进行不良品点检"; SendBarcode(); } } } }在此基础上修改,当良品和不良品测试结束后,条码不再受约束,无论输入什么条码,label状态栏始终是黄色,并提示,“已点检,请进行ICT测试”,并且所有条码都可以发送到ICT测试软件
根据您的描述,您需要在良品和不良品测试结束后,解除对条码的限制,使得无论输入什么条码,都可以发送到ICT测试软件并提示“已点检,请进行ICT测试”,而且label状态栏始终是黄色。那么您可以参考下面的代码进行修改:
```
if (e.KeyCode == Keys.Enter)
{
// 判断条码是否为设置的良品或不良品条码
string barcode = txt_barcode.Text.Trim();
string connectionString = @"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = db.accdb;Jet OLEDB:Database Password = @maruhi";
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
connection.Open();
OleDbCommand command = new OleDbCommand("SELECT COUNT(*) FROM ICT_test WHERE Date=@date AND Barcode=@barcode AND Result='OK'", connection);
command.Parameters.AddWithValue("@date", DateTime.Now.ToString("yyyy-MM-dd"));
command.Parameters.AddWithValue("@barcode", barcode);
int count = (int)command.ExecuteScalar();
if (count == 0)
{
// 条码错误
lb_test_state.BackColor = Color.Red;
lb_test_state.Text = "条码错误 ";
// 良品或不良品点检
if (goodBarcodeList.Contains(barcode))
{
lb_test_state.BackColor = Color.Yellow;
lb_test_state.Text = "请进行良品点检";
SendBarcode();
}
else if (badBarcodeList.Contains(barcode))
{
lb_test_state.BackColor = Color.Yellow;
lb_test_state.Text = "请进行不良品点检";
SendBarcode();
}
else
{
lb_test_state.BackColor = Color.Yellow;
lb_test_state.Text = "已点检,请进行ICT测试";
SendBarcode();
}
}
else
{
lb_test_state.BackColor = Color.Green;
lb_test_state.Text = "测试通过";
SendBarcode();
}
}
}
```
在代码中,我们加入了一个`else`语句,当条码不是良品和不良品条码时,就会执行这个`else`语句,将label状态栏设为黄色,并提示“已点检,请进行ICT测试”,然后将条码发送到ICT测试软件。这样,无论输入什么条码,都可以发送到ICT测试软件并提示“已点检,请进行ICT测试”,而且label状态栏始终是黄色。