目的

スキャンした文字列を取得します。

テキストボックスに入力する場合

単にテキストボックスに入力したいだけなら、テキストボックスにフォーカスを当てて、スキャンすれば文字列が自動で入力されるかと思います。スキャン文字列の前後に意図しない文字が含まれる場合、ターミナルの設定で、接頭語(プレフィックス)、接尾語(サフィックス)に何も割り当てていないか確認してみてください。

バックグラウンドで処理したい場合

今回は、接頭語に0x02(STX: テキスト開始)、接尾語に0x03(ETX: テキスト終了)などを付加して、0x02~0x03までの文字列を取り出してくる方法を取りました。

using System;
using System.Data;
using System.Drawings;
using System.Windows.Forms;
using MySql.Data.Client;

class EntryPoint
{
	[STAThread]
	public static void Main( string[] arg )
	{
		Application.Run( new Top() );
	}
}

class Top : Form
{
	private ComboBox m_combobox;
	private TextBox m_textbox;
	private Button m_button;
	private bool m_reading;
	private string m_scan;

	public Top()
	{
		m_combobox = new ComboBox();
		m_combobox.Location = new Point( 20, 20 );
		m_combobox.Size = new Size( 200, 20 );
		m_combobox.Add( "ComboBox 1" );
		m_combobox.Add( "ComboBox 2" );
		m_combobox.Add( "ComboBox 3" );
		m_combobox.SelectedIndex = 0;

		m_textbox = new Textbox();
		m_textbox.Location = new Point( 20, 60 );
		m_textbox.Size = new Size( 200, 20 );

		m_button = new Textbox();
		m_button.Location = new Point( 20, 100 );
		m_button.Size = new Size( 200, 20 );
		m_button.Text = "Close"
		m_button.Click += new EventHandler( on_click_button );

		Controls.Add( m_combobox );
		Controls.Add( m_textbox );
		Controls.Add( m_button );

		m_reading = false;
		m_scan = "";
		KeyPreview = true;
		KeyPress += new KeyPressEventHandler( on_key_press );
	}

	private void on_click_button( object s, EventArgs e )
	{
		Application.Exit();
	}

	private void on_key_press( object s, KeyPressEventArgs e )
	{
		switch ((int)e.KeyChar)
		{
			case 0x02:
				m_textbox.ReadOnly = true;
				m_reading = true;
				break;

			case 0x03:
				MessageBox.Show( m_scan );
				m_scan = "";
				m_textbox.ReadOnly = false;
				m_reading = false;
				break;

			default:
				if (m_reading) m_scan += e.KeyChar;
				break;
		}
	}

最終更新日: 2019/06/14