目次

ボタン処理

 ボタンは、7種あります。

 各々のボタンで実現する処理を説明します。

Open Port、Close Port

 シリアルポートのOpen、Closeに必要な機能を考えます。  Openボタン処理   シリアルポートをOpenするには、以下のコードの実行だけです。 sciDTB.Open();   このOpen処理が成功するためには、該当するCOMポートが存在して   いなければなりません。   Windowsのシステム状態を参照すると、指定したCOMポートが存在する   かは確認できますが、間違えて指定することもあり得ます。   間違えて指定した場合の処理を「try catch」で掴まえ   ユーザーに報告する仕様とします。   エラー発生を「catch」の処理で記述しておき、COMポートを指定する   処理を「try」の中に記述します。   シリアルポート番号指定は、プロパティPortNameに文字列で   入力します。COM4であれば、文字列COM4を入力します。   ポート番号は、NumericUpDownボックスで1〜15のいずれかに   なっているので、その情報を文字列COMと接続した後に、PortName   に代入します。   シリアルポートをOpenしている状態を示すために、ボタンを   灰色表示にします。そのためのフラグをグローバルで用意し   対応します。   上記内容をまとめ、次のコードとなります。 private void btnOpenPort_Click(object sender, EventArgs e) { // judge if ( gPflag == true ) return; // try { // get COM port number string com_str; com_str = "COM" + nudPort.Value; // set Port Name sciDTB.PortName = com_str; //MessageBox.Show(sciDTB.PortName); // Open Port sciDTB.Open(); // update button states gPflag = true; btnOpenPort.Enabled = false; btnClosePort.Enabled = true; } catch (System.IO.IOException myIOe) { MessageBox.Show(myIOe.ToString(), "ERROR:COM port not exists!"); gPflag = false; btnOpenPort.Enabled = true; btnClosePort.Enabled = false; } }  Closeボタン   シリアルポートのCloseは、次のコードを実行します。 sciDTB.Close();   このOpenしているか否かは、フラグgPflagの論理値で   判定できるので、論理値がtrueの場合だけ、Closeを   実行します。   ボタンの状態を変更するコードを加えておきます。 private void btnClosePort_Click(object sender, EventArgs e) { // judge if ( !gPflag ) return ; // change flag state gPflag = false ; btnOpenPort.Enabled = true ; btnClosePort.Enabled = false ; // Close Port sciDTB.Close(); }

send R

 相談者から示されたコマンドは"R\n"ですが、自前の  エミュレータでは"C\r"なので、最初に自前のコマンド  を作成しテストします。  テスト終了後、依頼されたコードに差し替えます。  単純に、文字列をWriteメソッドでポートに出力しますが  ポートがオープン状態でなければ、エラーメッセージで  ユーザーに報告する仕様とします。 private void btnSend_Click(object sender, EventArgs e) { if (sciDTB.IsOpen) { // after test completed , change this code //string sendCmd = "R\n"; string sendCmd = "C\r"; sciDTB.Write(sendCmd); textCmd.Text = sendCmd; } else { MessageBox.Show("Not valid port"); } }  ユーザーが、コマンドをポートに出力したかを確認できる  ように、テキストボックスに文字列を表示します。

Save

 テキストボックスの内容を、テキストファイルに保存する  処理を実行します。  ファイル名が必要なので、ファイル名がテキストボックスにない  場合は、エラーメッセージを出します。  実際のファイル保存は、独自クラスのテキストボックスで定義して  あるメソッドに、ファイル名を渡して実行します。  そのためInvokeメソッドを使います。 private void btnSave_Click(object sender, EventArgs e) { // judge if (textFileName.Text.Length > 0) { // generate file name with path gFName = textDir.Text + "\\" + textFileName.Text; //MessageBox.Show(gFName); Invoke(new SaveText(rMyTextBox.SaveText), new object[] { gFName }); } else { MessageBox.Show("No file name !"); } }  Invokeメソッドを使うためには、Delegateでどのクラスメソッドに  該当するのかを指定しておきます。 delegate void SaveText(string text);  InvokeとDelegateに関しては、別の章で説明します。

Clear

 テキストボックスの内容を、クリアします。  実際のファイル保存は、独自クラスのテキストボックスで定義して  あるメソッドに、依頼して実行します。  そのためInvokeメソッドを使います。 private void btnClear_Click(object sender, EventArgs e) { //MessageBox.Show("Clear Text Area"); Invoke(new ClrText(rMyTextBox.ClrText)); }  Invokeメソッドを使うので、DelegateでClrTextを宣言しておきます。 delegate void ClrText();

Exit

 アプリケーションを終了します。  COMポートをOpen状態にしたままで終了すると、ゾンビの  スレッドあるいはプロセスが残る可能性があります。  ゾンビをなくすために、COMポートがOpen状態であれば  Closeします。 private void btnExit_Click(object sender, EventArgs e) { // judge if ( sciDTB.IsOpen ) { sciDTB.Close(); } // End this.Dispose(); }

About

 情報を表示すればよいので、必要な内容を文字列で  記述し、メッセージボックスを使って出力します。 private void aboutToolStripMenuItem_Click(object sender, EventArgs e) { /* local string */ string str ; /* store string to variables */ str = "Serial Transfer\r\n" ; str += "Copy Right : Kensuke Ooyu\r\n" ; str += "2010/04/02" ; /* show */ MessageBox.Show(str); }
目次

inserted by FC2 system