c#窗体应用程序实现当软件开启,就在数据库扫描是否有设置的良品和不良品条码的当天ICT测试记录(ICT_test表中Barcode,Date,Result),良品和不良品条码在本地文件夹txt文件中获取。如果数据库中有良品和不良品测试记录存在,lable状态栏变绿并提示“已点检,请进行ICT测试”,然后进行别的条码的ICT测试。就将扫到的条码通过模拟键盘发送到ICT测试软件进行测试。如果没有,别的条码发送时会被拦截,label状态栏变红,并提示“请进行测试前点检”,然后就先进行设置条码的ICT测试,判断扫描到txt_Barcode中条码是否为获取到设置的良品或不良品条码,如输入的条码不符合,label状态栏变红,并提示“条码错误”,如输入的条码正确并为设置的良品条码,label状态栏变绿,并提示“请进行良品点检”,就将良品条码发送到ICT测试软件进行ICT测试,当发现某一文件夹中有良品测试报告生成,表示良品测试完成,测试完成后就提示“良品点检完成”。如扫描的是设置的不良品条码,则label状态栏变绿,并提示“请进行不良品点检”,进行ICT测试。当发现某一文件夹中有不良品测试报告生成,表示不良品测试完成。(所有条码先扫描到c#窗体软件txt_barcode中,在通过模拟键盘定位发送到ICT测试软件条码框中,然后进行ICT测试)代码实现
时间: 2023-11-27 11:06:20 浏览: 198
一个基于C#实现的自动生成barcodes条码及验证程序代码
4星 · 用户满意度95%
这是一个比较复杂的应用程序,需要涉及到数据库操作、文件操作、模拟键盘操作等多个方面。以下是一个基本的代码框架,可以供你参考:
```
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.IO;
using System.Threading;
namespace ICT_Test
{
public partial class MainForm : Form
{
private string connStr = "Data Source=(local);Initial Catalog=ICT_Test;Integrated Security=True";
private string goodBarcodeFile = "goodBarcode.txt";
private string badBarcodeFile = "badBarcode.txt";
private string goodTestFolder = "goodTest";
private string badTestFolder = "badTest";
private bool isTested = false;
private bool isGoodTested = false;
private bool isBadTested = false;
public MainForm()
{
InitializeComponent();
}
private void MainForm_Load(object sender, EventArgs e)
{
// 打开软件时检查是否有点检记录
CheckTestStatus();
}
private void CheckTestStatus()
{
SqlConnection conn = new SqlConnection(connStr);
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "SELECT * FROM ICT_test WHERE Date=@date AND (Result='良品' OR Result='不良品')";
cmd.Parameters.AddWithValue("@date", DateTime.Today.ToShortDateString());
SqlDataReader reader = cmd.ExecuteReader();
if (reader.HasRows)
{
// 有点检记录
isTested = true;
statusLabel.ForeColor = Color.Green;
statusLabel.Text = "已点检,请进行ICT测试";
}
else
{
// 没有点检记录
isTested = false;
statusLabel.ForeColor = Color.Red;
statusLabel.Text = "请进行测试前点检";
}
reader.Close();
conn.Close();
}
private void barcodeTextBox_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
string barcode = barcodeTextBox.Text.Trim();
if (isTested)
{
// 已点检
if (CheckGoodBarcode(barcode))
{
// 良品点检
isGoodTested = true;
statusLabel.Text = "请进行良品点检";
SendBarcode(barcode);
}
else if (CheckBadBarcode(barcode))
{
// 不良品点检
isBadTested = true;
statusLabel.Text = "请进行不良品点检";
SendBarcode(barcode);
}
else
{
// 条码错误
statusLabel.ForeColor = Color.Red;
statusLabel.Text = "条码错误";
}
}
else
{
// 未点检
if (CheckGoodBarcode(barcode))
{
// 良品点检
isGoodTested = true;
statusLabel.ForeColor = Color.Green;
statusLabel.Text = "请进行良品点检";
SendBarcode(barcode);
}
else if (CheckBadBarcode(barcode))
{
// 不良品点检
isBadTested = true;
statusLabel.ForeColor = Color.Green;
statusLabel.Text = "请进行不良品点检";
SendBarcode(barcode);
}
else
{
// 条码错误
statusLabel.ForeColor = Color.Red;
statusLabel.Text = "条码错误";
}
}
barcodeTextBox.Text = "";
}
}
private bool CheckGoodBarcode(string barcode)
{
List<string> barcodes = GetBarcodes(goodBarcodeFile);
return barcodes.Contains(barcode);
}
private bool CheckBadBarcode(string barcode)
{
List<string> barcodes = GetBarcodes(badBarcodeFile);
return barcodes.Contains(barcode);
}
private List<string> GetBarcodes(string filename)
{
List<string> barcodes = new List<string>();
try
{
using (StreamReader sr = new StreamReader(filename))
{
string line;
while ((line = sr.ReadLine()) != null)
{
barcodes.Add(line.Trim());
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return barcodes;
}
private void SendBarcode(string barcode)
{
// 模拟键盘发送条码
SendKeys.Send(barcode);
SendKeys.Send("{ENTER}");
}
private void timer1_Tick(object sender, EventArgs e)
{
if (isGoodTested)
{
// 检查良品测试完成情况
if (CheckTestFolder(goodTestFolder))
{
isGoodTested = false;
statusLabel.ForeColor = Color.Green;
statusLabel.Text = "良品点检完成";
}
}
if (isBadTested)
{
// 检查不良品测试完成情况
if (CheckTestFolder(badTestFolder))
{
isBadTested = false;
statusLabel.ForeColor = Color.Green;
statusLabel.Text = "不良品点检完成";
}
}
}
private bool CheckTestFolder(string foldername)
{
bool isTested = false;
try
{
DirectoryInfo dir = new DirectoryInfo(foldername);
FileInfo[] files = dir.GetFiles();
if (files.Length > 0)
{
isTested = true;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return isTested;
}
}
}
```
该代码框架中包括了窗体加载时检查点检记录、扫描条码时判断是否已点检、判断扫描到的条码是否为良品或不良品条码、模拟键盘发送条码、定时检查测试文件夹是否有测试报告生成等多个功能。需要注意的是,该程序中涉及到的数据库表、本地文件夹、条码文件名等根据实际情况进行修改。另外,该程序还需要一个定时器控件(Timer),用于定时检查测试文件夹是否有测试报告生成。
阅读全文