人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Visual C#でシリアル送信の作成をしています。

通信設定を固定値で出来るようになったので、ComboBoxで選択してそれを設定値として
使用したいと思ったのですが、int、stringはいいのですが、Parity、StopBitsが
それぞれSystem.IO.Port.Parityの列挙体、System.IO.Port.StopBitsの列挙体で、
ComboCoxにどう設定すればいいのか?また関数の引数にどう渡せばいいのか?が
判らずに困っております。

どなたか、ご教示をお願い致します。

●質問者: gontakun_55
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● うぃんど
●20ポイント

手入力は無いのでListBoxやRadio Buttonsのほうがいいようにも思うけど…。

それはさておき…、
ComboBoxではStart、Stopそれぞれどれか一つを選ばせるだけにして、
送信開始ボタンが押された時の処理で、
選ばれたものにあわせてパリティセットする形にします。

・StartBits は Even、Mark、None、Odd、Space のいずれかを選択させる。
・StopBitsは None、One、Two、OnePointFive のいずれかを選択させる。

MSDNの関連ページも参考に。
http://msdn.microsoft.com/ja-jp/library/system.io.ports.parity%28v=vs.90%29.aspx
http://msdn.microsoft.com/ja-jp/library/system.io.ports.stopbits%28v=vs.90%29.aspx


gontakun_55さんのコメント
回答ありがとうございます。 確かに、手入力が無いならListBoxの方がいいですね。 ご指摘ありがとうございます。

2 ● a-kuma3
●10ポイント

コンボボックスに割り振る値と、列挙体のメンバーを対応付けた switch ? case で設定するしかないんじゃないでしょうか。

 switch (...) {
 case 1:
 serialPort1.Parity = System.IO.Ports.Parity.None;
 break;
 case 2:
 serialPort1.Parity = System.IO.Ports.Parity.Even;
 break;
 ...
 }

また関数の引数にどう渡せばいいのか?が
判らずに困っております。

前の質問にあった serialPort1 って SerialPort コントロールですよね?
Open メソッドを呼ぶ前に、プロパティにセットしてあげます。
こんなのが落ちてたんで、参考まで。
http://homepage2.nifty.com/nonnon/SoftSample/CS.NET/SampleRs232c.html

 private void Form1_Load(
 object sender, EventArgs e)
 {
 // シリアルポートのオープン
 serialPort1.PortName = "COM11";
 // シリアルポートの通信速度指定
 serialPort1.BaudRate = 9600;
 // シリアルポートのパリティ指定
 serialPort1.Parity = System.IO.Ports.Parity.None;
 // シリアルポートのビット数指定
 serialPort1.DataBits = 8;
 // シリアルポートのストップビット指定
 serialPort1.StopBits = System.IO.Ports.StopBits.One;
 // シリアルポートのオープン
 serialPort1.Open();
 }

a-kuma3さんのコメント
出遅れた ><。

うぃんどさんのコメント
スピード競争じゃないですし、 回答No.1が画面側で、回答No.2が送信ボタンが押されてからの処理方法って、 流れ的にもちょうどいいじゃないですか(微笑)

gontakun_55さんのコメント
ご回答ありがとうございます。 上記は固定値での場合になると思います。 今回は設定を変更させたい場合の方法となります。

うぃんどさんのコメント
横から失礼。 ご回答の前半にあるswitch構文で入力値にあわせた設定変更を行っていますので固定ではないですよ。

gontakun_55さんのコメント
あ、確かにそうですね。 勘違いしておりました。 ご指摘ありがとうございます。

3 ● freemann
●70ポイント ベストアンサー

以下のやり方ならある程度自動化できるかと思います。


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.IO.Ports;

namespace _1375953045
{
 public partial class Form1 : Form
 {
 public Form1()
 {
 InitializeComponent();
 }

 private void Form1_Load(object sender, EventArgs e)
 {
 foreach (string a in Enum.GetNames(typeof(Parity)))
 {
 this.comboBox1.Items.Add(a);

 }
 foreach (string a in Enum.GetNames(typeof(StopBits)))
 {
 this.comboBox2.Items.Add(a);

 }
 }

 private void button1_Click(object sender, EventArgs e)
 {
 Parity p = (Parity)Enum.Parse(typeof(Parity), this.comboBox1.SelectedItem.ToString());
 StopBits s = (StopBits)Enum.Parse(typeof(StopBits), this.comboBox2.SelectedItem.ToString());

 this.label1.Text = p.ToString();
 this.label2.Text = s.ToString();
 }
 }
}


gontakun_55さんのコメント
ご回答ありがとうございます。 これです、これです! 出来ました! ありがとうございます。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ