图像采集,数据库连接搜索

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.IO;
using GxIAPINET;
using GxIAPINET.Sample.Common;

using System.Data.OleDb;
using System.Collections;

namespace GxSingleCam
{
public partial class GxSingleCam : Form
{
private OleDbConnection conn;
private OleDbDataAdapter da;
private DataSet ds;

    bool                 m_bIsOpen                    = false;                           ///<设备打开状态
    bool                 m_bIsSnap                    = false;                           ///<发送开采命令标识
    bool                 m_bTriggerMode               = false;                           ///<是否支持触发模式
    bool                 m_bTriggerActive             = false;                           ///<是否支持触发极性
    bool                 m_bTriggerSource             = false;                           ///<是否支持触发源 
    bool                 m_bWhiteAuto                 = false;                           ///<标识是否支持白平衡
    bool                 m_bBalanceRatioSelector      = false;                           ///<标识是否支持白平衡通道
    bool                 m_bWhiteAutoSelectedIndex    = true;                            ///<白平衡列表框转换标志
    IGXFactory           m_objIGXFactory              = null;                            ///<Factory对像
    IGXDevice            m_objIGXDevice               = null;                            ///<设备对像
    IGXStream            m_objIGXStream               = null;                            ///<流对像
    IGXFeatureControl    m_objIGXFeatureControl       = null;                            ///<远端设备属性控制器对像
    string               m_strBalanceWhiteAutoValue   = "Off";                           ///<自动白平衡当前的值
    GxBitmap             m_objGxBitmap                = null;                            ///<图像显示类对象
    string               m_strFilePath                = "";                              ///<应用程序当前路径
   
    

    public GxSingleCam()
    {
        // 获取应用程序的当前执行路径
        m_strFilePath = Directory.GetCurrentDirectory().ToString();
        m_strFilePath = m_strFilePath + "\\GxSingleCamImages";

        //查看是否存在此文件
        if (!Directory.Exists(m_strFilePath))
        {
            Directory.CreateDirectory(m_strFilePath);
        }
        InitializeComponent();
    }
    //dakaishujuku
    private void opendata()
    {
        string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Administrator\Desktop\caiji1\data.mdb";
        string queryString = "SELECT ID, 底座编号,药品名称 FROM sheet1";
        this.conn = new OleDbConnection(connectionString);
        this.ds = new DataSet();
        this.ds.Tables.Add("sheet1");
        this.da = new OleDbDataAdapter(queryString, conn);
    }
    //填充列表框
    private void ListBoxFill()
    {
        if (this.ds.Tables[0].Rows != null) this.ds.Tables[0].Rows.Clear();
        this.listBoxEmployee.DataSource = null;
        this.listBoxEmployee.Items.Clear();
        this.da.Fill(ds, "sheet1");
        this.listBoxEmployee.DataSource = ds.Tables["sheet1"];
        this.listBoxEmployee.DisplayMember = "药品名称";
        this.listBoxEmployee.ValueMember = "ID";
    }

    /// <summary>
    /// 设备打开后初始化界面
    /// </summary>
    private void __InitUI()
    {
        __InitEnumComBoxUI(m_cb_TriggerMode, "TriggerMode", m_objIGXFeatureControl, ref m_bTriggerMode);                      //触发模式初始化
        __InitEnumComBoxUI(m_cb_TriggerSource, "TriggerSource", m_objIGXFeatureControl, ref m_bTriggerSource);                //触发源初始化
        __InitEnumComBoxUI(m_cb_TriggerActivation, "TriggerActivation", m_objIGXFeatureControl, ref m_bTriggerActive);        //触发极性初始化
        __InitShutterUI();                                                                                                    //曝光初始化
        __InitGainUI();                                                                                                       //增益的初始化
        __InitWhiteRatioUI();                                                                                                 //初始化白平衡系数相关控件
        __InitEnumComBoxUI(m_cb_AutoWhite, "BalanceWhiteAuto", m_objIGXFeatureControl, ref m_bWhiteAuto);                     //自动白平衡的初始化
        __InitEnumComBoxUI(m_cb_RatioSelector, "BalanceRatioSelector", m_objIGXFeatureControl, ref m_bBalanceRatioSelector);  //白平衡通道选择


        //获取白平衡当前的值
        bool bIsImplemented = false;             //是否支持
        bool bIsReadable = false;                //是否可读
        // 获取是否支持
        if (null != m_objIGXFeatureControl)
        {
            bIsImplemented = m_objIGXFeatureControl.IsImplemented("BalanceWhiteAuto");
            bIsReadable = m_objIGXFeatureControl.IsReadable("BalanceWhiteAuto");
            if (bIsImplemented)
            {
                if (bIsReadable)
                {
                    //获取当前功能值
                    m_strBalanceWhiteAutoValue = m_objIGXFeatureControl.GetEnumFeature("BalanceWhiteAuto").GetValue();
                }
            }
        }
    }


    /// <summary>
    /// 对枚举型变量按照功能名称设置值
    /// </summary>
    /// <param name="strFeatureName">枚举功能名称</param>
    /// <param name="strValue">功能的值</param>
    /// <param name="objIGXFeatureControl">属性控制器对像</param>
    private void __SetEnumValue(string strFeatureName, string strValue, IGXFeatureControl objIGXFeatureControl)
    {
        if (null != objIGXFeatureControl)
        {
            //设置当前功能值
            objIGXFeatureControl.GetEnumFeature(strFeatureName).SetValue(strValue);
        }
    }

    /// <summary>
    /// 枚举型功能ComBox界面初始化
    /// </summary>
    /// <param name="cbEnum">ComboBox控件名称</param>
    /// <param name="strFeatureName">枚举型功能名称</param>
    /// <param name="objIGXFeatureControl">属性控制器对像</param>
    /// <param name="bIsImplemented">是否支持</param>
    private void __InitEnumComBoxUI(ComboBox cbEnum, string strFeatureName, IGXFeatureControl objIGXFeatureControl, ref bool bIsImplemented)
    {
        string strTriggerValue = "";                   //当前选择项
        List<string> list = new List<string>();   //Combox将要填入的列表
        bool bIsReadable = false;                //是否可读
        // 获取是否支持
        if (null != objIGXFeatureControl)
        {

            bIsImplemented = objIGXFeatureControl.IsImplemented(strFeatureName);
            // 如果不支持则直接返回
            if (!bIsImplemented)
            {
                return;
            }

            bIsReadable = objIGXFeatureControl.IsReadable(strFeatureName);

            if (bIsReadable)
            {
                list.AddRange(objIGXFeatureControl.GetEnumFeature(strFeatureName).GetEnumEntryList());
                //获取当前功能值
                strTriggerValue = objIGXFeatureControl.GetEnumFeature(strFeatureName).GetValue();
            }

        }

        //清空组合框并更新数据到窗体
        cbEnum.Items.Clear();
        foreach (string str in list)
        {
            cbEnum.Items.Add(str);
        }

        //获得相机值和枚举到值进行比较,刷新对话框
        for (int i = 0; i < cbEnum.Items.Count; i++)
        {
            string strTemp = cbEnum.Items[i].ToString();
            if (strTemp == strTriggerValue)
            {
                cbEnum.SelectedIndex = i;
                break;
            }
        }
    }

    /// <summary>
    /// 初始化白平衡系数相关控件
    /// </summary>
    private void __InitWhiteRatioUI()
    {
        double dWhiteRatio = 0.0;                       //当前曝光值
        double dMin = 0.0;                       //最小值
        double dMax = 0.0;                       //最大值
        string strUnit = "";                        //单位
        string strText = "";                        //显示内容
        bool bIsBalanceRatio = false;                   //是否白平衡是否支持
        //获取当前相机的白平衡系数、最小值、最大值和单位
        if (null != m_objIGXFeatureControl)
        {
            bIsBalanceRatio = m_objIGXFeatureControl.IsImplemented("BalanceRatio");
            if (!bIsBalanceRatio)
            {
                m_txt_BalanceRatio.Enabled = false; ;
                return;
            }
            dWhiteRatio = m_objIGXFeatureControl.GetFloatFeature("BalanceRatio").GetValue();
            dMin = m_objIGXFeatureControl.GetFloatFeature("BalanceRatio").GetMin();
            dMax = m_objIGXFeatureControl.GetFloatFeature("BalanceRatio").GetMax();
            strUnit = m_objIGXFeatureControl.GetFloatFeature("BalanceRatio").GetUnit();
        }

        //刷新获取白平衡系数范围及单位到界面上
        strText = string.Format("白平衡系数({0}~{1}){2}", dMin.ToString("0.00"), dMax.ToString("0.00"), strUnit);
        m_lbl_WhiteRatio.Text = strText;

        //当前的白平衡系数的编辑框
        m_txt_BalanceRatio.Text = dWhiteRatio.ToString("0.00");
    }


    /// <summary>
    /// 曝光控制界面初始化
    /// </summary>
    private void __InitShutterUI()
    {
        double dCurShuter = 0.0;                       //当前曝光值
        double dMin = 0.0;                       //最小值
        double dMax = 0.0;                       //最大值
        string strUnit = "";                        //单位
        string strText = "";                        //显示内容

        //获取当前相机的曝光值、最小值、最大值和单位
        if (null != m_objIGXFeatureControl)
        {
            dCurShuter = m_objIGXFeatureControl.GetFloatFeature("ExposureTime").GetValue();
            dMin = m_objIGXFeatureControl.GetFloatFeature("ExposureTime").GetMin();
            dMax = m_objIGXFeatureControl.GetFloatFeature("ExposureTime").GetMax();
            strUnit = m_objIGXFeatureControl.GetFloatFeature("ExposureTime").GetUnit();
        }

        //刷新曝光范围及单位到界面上
        strText = string.Format("曝光时间({0}~{1}){2}", dMin.ToString("0.00"), dMax.ToString("0.00"), strUnit);
        m_lbl_Shutter.Text = strText;

        //当前的曝光值刷新到曝光的编辑框
        m_txt_Shutter.Text = dCurShuter.ToString("0.00");
    }

    /// <summary>
    /// 增益控制界面初始化
    /// </summary>
    private void __InitGainUI()
    {
        double dCurGain = 0;             //当前增益值
        double dMin = 0.0;           //最小值
        double dMax = 0.0;           //最大值
        string strUnit = "";            //单位
        string strText = "";            //显示内容

        //获取当前相机的增益值、最小值、最大值和单位
        if (null != m_objIGXFeatureControl)
        {
            dCurGain = m_objIGXFeatureControl.GetFloatFeature("Gain").GetValue();
            dMin = m_objIGXFeatureControl.GetFloatFeature("Gain").GetMin();
            dMax = m_objIGXFeatureControl.GetFloatFeature("Gain").GetMax();
            strUnit = m_objIGXFeatureControl.GetFloatFeature("Gain").GetUnit();
        }

        //更新增益值范围到界面
        strText = string.Format("增益({0}~{1}){2}", dMin.ToString("0.00"), dMax.ToString("0.00"), strUnit);
        m_lbl_Gain.Text = strText;

        //当前的增益值刷新到增益的编辑框
        string strCurGain = dCurGain.ToString("0.00");
        m_txt_Gain.Text = strCurGain;
    }

    /// <summary>
    /// 更新界面
    /// </summary>
    void __UpdateUI()
    {
        //相机控制相关使能操作
        m_btn_OpenDevice.Enabled = !m_bIsOpen;
        m_btn_CloseDevice.Enabled = m_bIsOpen;
        m_btn_StartDevice.Enabled = m_bIsOpen && !m_bIsSnap;
        m_btn_StopDevice.Enabled = m_bIsSnap;

        //相机参数相关的使能操作
        m_cb_TriggerMode.Enabled = m_bIsOpen && m_bTriggerMode;
        m_cb_TriggerSource.Enabled = m_bIsOpen && m_bTriggerSource;
        m_cb_TriggerActivation.Enabled = m_bIsOpen && m_bTriggerActive;
        m_cb_RatioSelector.Enabled = m_bIsOpen && m_bBalanceRatioSelector;


        m_txt_Shutter.Enabled = m_bIsOpen;
        m_txt_Gain.Enabled = m_bIsOpen;
        m_txt_BalanceRatio.Enabled = m_bIsOpen
                                     && m_bBalanceRatioSelector
                                     && (m_strBalanceWhiteAutoValue == "Off");


        m_cb_AutoWhite.Enabled = m_bIsOpen && m_bWhiteAuto;
        m_btn_SoftTriggerCommand.Enabled = m_bIsOpen;
    }

    /// <summary>
    /// 相机初始化
    /// </summary>
    void __InitDevice()
    {
        if (null != m_objIGXFeatureControl)
        {
            //设置采集模式连续采集
            m_objIGXFeatureControl.GetEnumFeature("AcquisitionMode").SetValue("Continuous");
        }
    }

    /// <summary>
    /// 关闭流
    /// </summary>
    private void __CloseStream()
    {
        try
        {
            //关闭流
            if (null != m_objIGXStream)
            {
                m_objIGXStream.Close();
                m_objIGXStream = null;
            }
        }
        catch (Exception)
        {
        }
    }

    /// <summary>
    /// 关闭设备
    /// </summary>
    private void __CloseDevice()
    {
        try
        {
            //关闭设备
            if (null != m_objIGXDevice)
            {
                m_objIGXDevice.Close();
                m_objIGXDevice = null;
            }
        }
        catch (Exception)
        {
        }
    }

    /// <summary>
    /// 加载窗体执行初始化UI和库
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void GxSingleCam_Load(object sender, EventArgs e)
    {
        try
        {
            //刷新界面
            __UpdateUI();

            m_objIGXFactory = IGXFactory.GetInstance();
            m_objIGXFactory.Init();

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        } 
    }

    /// <summary>
    /// 打开设备打开流
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void m_btn_OpenDevice_Click(object sender, EventArgs e)
    {
        try
        {
            List<IGXDeviceInfo> listGXDeviceInfo = new List<IGXDeviceInfo>();

            //关闭流
            __CloseStream();
            // 如果设备已经打开则关闭,保证相机在初始化出错情况下能再次打开
            __CloseDevice();

            m_objIGXFactory.UpdateDeviceList(200, listGXDeviceInfo);

            // 判断当前连接设备个数
            if (listGXDeviceInfo.Count <= 0)
            {
                MessageBox.Show("未发现设备!");
                return;
            }

            // 如果设备已经打开则关闭,保证相机在初始化出错情况下能再次打开
            if (null != m_objIGXDevice)
            {
                m_objIGXDevice.Close();
                m_objIGXDevice = null;
            }

            //打开列表第一个设备

            m_objIGXDevice = m_objIGXFactory.OpenDeviceBySN(listGXDeviceInfo[0].GetSN(), GX_ACCESS_MODE.GX_ACCESS_EXCLUSIVE);
            m_objIGXFeatureControl = m_objIGXDevice.GetRemoteFeatureControl();


            //打开流
            if (null != m_objIGXDevice)
            {
                m_objIGXStream = m_objIGXDevice.OpenStream(0);
            }

            //初始化相机参数
            __InitDevice();

            // 获取相机参数,初始化界面控件
            __InitUI();

            m_objGxBitmap = new GxBitmap(m_objIGXDevice, m_pic_ShowImage);

            // 更新设备打开标识
            m_bIsOpen = true;

            //刷新界面
            __UpdateUI();

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        } 
    }

    /// <summary>
    /// 关闭设备关闭流
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void m_btn_CloseDevice_Click(object sender, EventArgs e)
    {
        try
        {
            try
            {
                // 如果未停采则先停止采集
                if (m_bIsSnap)
                {
                    if (null != m_objIGXFeatureControl)
                    {
                        m_objIGXFeatureControl.GetCommandFeature("AcquisitionStop").Execute();
                        m_objIGXFeatureControl = null;
                    }
                }
            }
            catch (Exception)
            {

            }

            m_bIsSnap = false;

            try
            {
                //停止流通道、注销采集回调和关闭流
                if (null != m_objIGXStream)
                {
                    m_objIGXStream.StopGrab();
                    //注销采集回调函数
                    m_objIGXStream.UnregisterCaptureCallback();
                    m_objIGXStream.Close();
                    m_objIGXStream = null;
                }
            }
            catch (Exception)
            {

            }

            try
            {
                //关闭设备
                if (null != m_objIGXDevice)
                {
                    m_objIGXDevice.Close();
                    m_objIGXDevice = null;
                }
            }
            catch (Exception)
            {

            }

            m_bIsOpen = false;

            //刷新界面
            __UpdateUI();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        } 
    }

    /// <summary>
    /// 开始采集
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void m_btn_StartDevice_Click(object sender, EventArgs e)
    {
        try
        {
            //开启采集流通道
            if (null != m_objIGXStream)
            {
                //RegisterCaptureCallback第一个参数属于用户自定参数(类型必须为引用
                //类型),若用户想用这个参数可以在委托函数中进行使用
                m_objIGXStream.RegisterCaptureCallback(this, __CaptureCallbackPro);
                m_objIGXStream.StartGrab();
            }

            //发送开采命令
            if (null != m_objIGXFeatureControl)
            {
                m_objIGXFeatureControl.GetCommandFeature("AcquisitionStart").Execute();
            }
            m_bIsSnap = true;

            // 更新界面UI
            __UpdateUI();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        } 
    }

    /// <summary>
    /// 停止采集
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void m_btn_StopDevice_Click(object sender, EventArgs e)
    {
        try
        {

            //发送停采命令
            if (null != m_objIGXFeatureControl)
            {
                m_objIGXFeatureControl.GetCommandFeature("AcquisitionStop").Execute();
            }


            //关闭采集流通道
            if (null != m_objIGXStream)
            {
                m_objIGXStream.StopGrab();
                //注销采集回调函数
                m_objIGXStream.UnregisterCaptureCallback();
            }


            m_bIsSnap = false;

            // 更新界面UI
            __UpdateUI();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        } 
    }

    /// <summary>
    /// 图像的显示和存储
    /// </summary>
    /// <param name="objIFrameData">图像信息对象</param>
    void ImageShowAndSave(IFrameData objIFrameData)
    {
        try
        {
            m_objGxBitmap.Show(objIFrameData);
        }
        catch (Exception)
        {
        }

        // 是否需要进行图像保存
        if (m_bSaveBmpImg.Checked)
        {
           string strlu = this.textBox1.Text;
            string stfFileName = m_strFilePath + "\\" + strlu + ".Png";  // 默认的图像保存名称
            m_objGxBitmap.SaveBmp(objIFrameData, stfFileName);
        
        }
    }

    /// <summary>
    /// 回调函数,用于获取图像信息和显示图像
    /// </summary>
    /// <param name="obj">用户自定义传入参数</param>
    /// <param name="objIFrameData">图像信息对象</param>
    private void __CaptureCallbackPro(object objUserParam, IFrameData objIFrameData)
    {
        try
        {
            GxSingleCam objGxSingleCam = objUserParam as GxSingleCam;
            objGxSingleCam.ImageShowAndSave(objIFrameData);
        }
        catch (Exception)
        {
        }
    }

    /// <summary>
    /// 切换"触发模式"combox框响应函数
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void m_cb_TriggerMode_SelectedIndexChanged(object sender, EventArgs e)
    {
        try
        {
            string strValue = m_cb_TriggerMode.Text;
            __SetEnumValue("TriggerMode", strValue, m_objIGXFeatureControl);

            // 更新界面UI
            __UpdateUI();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        } 
    }

    /// <summary>
    /// 切换"触发源"Combox消息响应函数
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void m_cb_TriggerSource_SelectedIndexChanged(object sender, EventArgs e)
    {
        try
        {
            string strValue = m_cb_TriggerSource.Text;
            __SetEnumValue("TriggerSource", strValue, m_objIGXFeatureControl);

            // 更新界面UI
            __UpdateUI();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        } 
    }

    /// <summary>
    /// 切换"触发极性"Combox消息响应函数
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void m_cb_TriggerActivation_SelectedIndexChanged(object sender, EventArgs e)
    {
        try
        {
            string strValue = m_cb_TriggerActivation.Text;
            __SetEnumValue("TriggerActivation", strValue, m_objIGXFeatureControl);

            // 更新界面UI
            __UpdateUI();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        } 
    }


    /// <summary>
    /// 发送软触发命令
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void m_btn_SoftTriggerCommand_Click(object sender, EventArgs e)
    {
        try
        {
            //发送软触发命令
            if (null != m_objIGXFeatureControl)
            {
                m_objIGXFeatureControl.GetCommandFeature("TriggerSoftware").Execute();
            }

            // 更新界面UI
            __UpdateUI();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        } 
    }
 
   

    /// <summary>
    /*-----------------------------------------------------------------------
     * 当切换自动白平衡模式为Once时,设备内部在设置完Once模式后会自动更新为off,
     * 为了与设备状态保持一致,程序以代码模拟该过程:判断当前设置模式为Once后,
     * 将界面随即更新为off(由UpdateWhiteAutoUI()函数实现),但此过程会导致函数
     * m_cb_AutoWhite_SelectedIndexChanged()执行两次,第二次执行时自动白平衡
     * 选项已经更新为off,若重新执行可能会打断Once的设置过程,引起白平衡不起作用,
     * 参数m_bWhiteAutoSelectedIndex即是为了解决函数重入问题而引入的变量
     ------------------------------------------------------------------------*/
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void m_cb_AutoWhite_SelectedIndexChanged(object sender, EventArgs e)
    {
        try
        {
            if (!m_bWhiteAutoSelectedIndex)
            {
                return;
            }
            string strValue = m_cb_AutoWhite.Text;
            __SetEnumValue("BalanceWhiteAuto", strValue, m_objIGXFeatureControl);
            m_strBalanceWhiteAutoValue = strValue;
            // 获取白平衡系数更新界面
            __InitWhiteRatioUI();
            // 更新界面UI
            __UpdateUI();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        } 
    }

    /// <summary>
    /// 切换"白平衡通道"选项响应函数
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void m_cb_RatioSelector_SelectedIndexChanged(object sender, EventArgs e)
    {
        try
        {
            string strValue = m_cb_RatioSelector.Text;
            __SetEnumValue("BalanceRatioSelector", strValue, m_objIGXFeatureControl);
            // 获取白平衡系数更新界面
            __InitWhiteRatioUI();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        } 
    }

    /// <summary>
    /// 窗体关闭、关闭流、关闭设备、反初始化
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void GxSingleCam_FormClosed(object sender, FormClosedEventArgs e)
    {
        try
        {
            // 如果未停采则先停止采集
            if (m_bIsSnap)
            {
                if (null != m_objIGXFeatureControl)
                {
                    m_objIGXFeatureControl.GetCommandFeature("AcquisitionStop").Execute();
                }
            }
        }
        catch (Exception)
        {

        }

        try
        {
            //停止流通道、注销采集回调和关闭流
            if (null != m_objIGXStream)
            {
                m_objIGXStream.StopGrab();
                m_objIGXStream.UnregisterCaptureCallback();
                m_objIGXStream.Close();
                m_objIGXStream = null;
            }
        }
        catch (Exception)
        {

        }

        try
        {
            //关闭设备
            if (null != m_objIGXDevice)
            {
                m_objIGXDevice.Close();
                m_objIGXDevice = null;
            }
        }
        catch (Exception)
        {

        }
       
        try
        {
            //反初始化
            if (null != m_objIGXFactory)
            {
                m_objIGXFactory.Uninit();
            }
        }
        catch (Exception)
        {

        }
    }

    /// <summary>
    /// 检查是否输入的是小数或整数,小数要求小数点最多8位
    /// </summary>
    /// <param name="sender">控件对象</param>
    /// <param name="e">按键响应事件</param>
    private void __CheckKeyPress(object sender, KeyPressEventArgs e)
    {
        if (!(((e.KeyChar >= '0') && (e.KeyChar <= '9')) || e.KeyChar <= 31))
        {
            if (e.KeyChar == '.')
            {
                if (((TextBox)sender).Text.Trim().IndexOf('.') > -1)
                    e.Handled = true;
            }
            else
                e.Handled = true;
        }
        else
        {
            if (e.KeyChar <= 31)
            {
                e.Handled = false;
            }
            else if (((TextBox)sender).Text.Trim().IndexOf('.') > -1)
            {
                if (((TextBox)sender).Text.Trim().Substring(((TextBox)sender).Text.Trim().IndexOf('.') + 1).Length >= 8)
                    e.Handled = true;
            }
        }
    }

    /// <summary>
    /// 判断曝光结束事件是否输入的是小数或整数
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void m_txt_Shutter_KeyPress(object sender, KeyPressEventArgs e)
    {
        __CheckKeyPress(sender, e);
    }

    /// <summary>
    /// 判断增益是否输入的是小数或整数
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void m_txt_Gain_KeyPress(object sender, KeyPressEventArgs e)
    {
        __CheckKeyPress(sender, e);
    }

    /// <summary>
    /// 判断白平衡系数是否输入的是小数或整数
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void m_txt_BalanceRatio_KeyPress(object sender, KeyPressEventArgs e)
    {
        __CheckKeyPress(sender, e);
    }

    /// <summary>
    /// 判断是否有回车按下
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void GxSingleCam_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Return)
        {
            this.m_pic_ShowImage.Focus();
        }
    }

    /// <summary>
    /// 控制曝光时间的Edit框失去焦点的响应函数
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void m_txt_Shutter_Leave(object sender, EventArgs e)
    {
        double dShutterValue = 0.0;              //曝光值
        double dMin = 0.0;                       //最小值
        double dMax = 0.0;                       //最大值

        try
        {
            try
            {
                dShutterValue = Convert.ToDouble(m_txt_Shutter.Text);
            }
            catch (Exception)
            {
                __InitShutterUI();
                MessageBox.Show("请输入正确的曝光时间");
                return;
            }

            //获取当前相机的曝光值、最小值、最大值和单位
            if (null != m_objIGXFeatureControl)
            {
                dMin = m_objIGXFeatureControl.GetFloatFeature("ExposureTime").GetMin();
                dMax = m_objIGXFeatureControl.GetFloatFeature("ExposureTime").GetMax();
                //判断输入值是否在曝光时间的范围内
                //若大于最大值则将曝光值设为最大值
                if (dShutterValue > dMax)
                {
                    dShutterValue = dMax;
                }
                //若小于最小值将曝光值设为最小值
                if (dShutterValue < dMin)
                {
                    dShutterValue = dMin;
                }

                m_txt_Shutter.Text = dShutterValue.ToString("F2");
                m_objIGXFeatureControl.GetFloatFeature("ExposureTime").SetValue(dShutterValue);
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        } 
    }

    /// <summary>
    /// 控制增益值的Edit框失去焦点的响应函数
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void m_txt_Gain_Leave(object sender, EventArgs e)
    {
        double dGain = 0;            //增益值
        double dMin = 0.0;           //最小值
        double dMax = 0.0;           //最大值
        try
        {
            try
            {
                dGain = Convert.ToDouble(m_txt_Gain.Text);
            }
            catch (Exception)
            {
                __InitGainUI();
                MessageBox.Show("请输入正确的增益值");
                return;
            }

            //当前相机的增益值、最小值、最大值
            if (null != m_objIGXFeatureControl)
            {
                dMin = m_objIGXFeatureControl.GetFloatFeature("Gain").GetMin();
                dMax = m_objIGXFeatureControl.GetFloatFeature("Gain").GetMax();

                //判断输入值是否在增益值的范围内
                //若输入的值大于最大值则将增益值设置成最大值
                if (dGain > dMax)
                {
                    dGain = dMax;
                }

                //若输入的值小于最小值则将增益的值设置成最小值
                if (dGain < dMin)
                {
                    dGain = dMin;
                }

                m_txt_Gain.Text = dGain.ToString("F2");
                m_objIGXFeatureControl.GetFloatFeature("Gain").SetValue(dGain);
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        } 
    }

    /// <summary>
    /// "白平衡系数"Edit框失去焦点响应函数
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void m_txt_BalanceRatio_Leave(object sender, EventArgs e)
    {
        double dBalanceRatio = 0;    //白平衡系数值
        double dMin = 0.0;           //最小值
        double dMax = 0.0;           //最大值
        try
        {
            try
            {
                dBalanceRatio = Convert.ToDouble(m_txt_BalanceRatio.Text);
            }
            catch (Exception)
            {
                __InitWhiteRatioUI();
                MessageBox.Show("请输入正确的白平衡系数");
                return;
            }

            //当前相机的白平衡系数值、最小值、最大值
            if (null != m_objIGXFeatureControl)
            {
                dMin = m_objIGXFeatureControl.GetFloatFeature("BalanceRatio").GetMin();
                dMax = m_objIGXFeatureControl.GetFloatFeature("BalanceRatio").GetMax();

                //判断输入值是否在白平衡系数的范围内
                //若大于最大值则将白平衡系数设为最大值
                if (dBalanceRatio > dMax)
                {
                    dBalanceRatio = dMax;
                }
                //若小于最小值将白平衡系数设为最小值
                if (dBalanceRatio < dMin)
                {
                    dBalanceRatio = dMin;
                }

                m_txt_BalanceRatio.Text = dBalanceRatio.ToString("F2");
                m_objIGXFeatureControl.GetFloatFeature("BalanceRatio").SetValue(dBalanceRatio);
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        } 
    }

    /// <summary>
    /// 更新自动白平衡从Once到off
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void m_timer_UpdateAutoWhite_Tick(object sender, EventArgs e)
    {
        try
        {
            string strValue = ""; //自动白平衡值
            Int32 i = 0;          //循环变量

            // 如果自动白平衡方式为Once,设置成功后实际的白平衡方式会自动变为off
            // 为与设备状态保持一致程序以代码模拟该过程:设置为Once后随即将界面更新为off
            if (m_strBalanceWhiteAutoValue == "Once")
            {
                try
                {
                    //获取自动白平衡枚举值
                    if (null != m_objIGXFeatureControl)
                    {
                        strValue = m_objIGXFeatureControl.GetEnumFeature("BalanceWhiteAuto").GetValue();
                    }
                }
                catch (Exception)
                {
                }
                m_strBalanceWhiteAutoValue = strValue;

                if (m_strBalanceWhiteAutoValue == "Off")
                {
                    for (i = 0; i < m_cb_AutoWhite.Items.Count; i++)
                    {
                        if (m_cb_AutoWhite.Items[i].ToString() == "Off")
                        {
                            m_cb_AutoWhite.SelectedIndex = i;
                            break;
                        }
                    }
                    __UpdateUI();
                }
            }
        }
        catch (Exception)
        {
        }
    }

    private void openbutton_Click_1(object sender, EventArgs e)
    {
        this.opendata();

        //tianchong
        this.ListBoxFill();
    }

    public string mess;
    private void surebutton_Click_1(object sender, EventArgs e)
    {
        textBox1.Text = string.Empty;
        string strcon = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Administrator\Desktop\caiji1\data.mdb";
        using (OleDbConnection conn1 = new OleDbConnection(strcon))
        {
            conn1.Open();
            OleDbCommand cmd = conn1.CreateCommand();

            mess = listBoxEmployee.SelectedValue.ToString();
            cmd.CommandText = "SELECT ID, 药品名称 FROM Sheet1 WHERE  ID=" + mess;
            OleDbDataReader reader = cmd.ExecuteReader();
            string data="";
            while (reader.Read())
            {
                 data= string.Format("{0} {1}\r\n", reader[0], reader[1]);
                
            }
             this.textBox1.Text = data;
             reader.Close();
            

            //mess = listBoxEmployee.SelectedValue.ToString();
            //cmd.CommandText = "SELECT ID, 药品名称 FROM Sheet1 WHERE  药品名称=" + mess;
            //OleDbDataReader reader = cmd.ExecuteReader();
            //string data = "ID药品名称\r\n";
            //while (reader.Read())
            //{
            //    data = string.Format("{0} {1}\r\n", reader[0], reader[1]);
            //}
            //this.textBox1.Text = data;
            //reader.Close();
        }
    }

    //private void listBoxEmployee_SelectedIndexChanged_1(object sender, EventArgs e)
    //{
    //    textBox1.Clear();
    //}

}

}

猜你喜欢

转载自blog.csdn.net/weixin_43025177/article/details/82963444