トップ回答者
コンボボックスについて

質問
-
コンボボックスに数値として30~60までの項目を用意してあり、コンボボックスから選択したその数値に×10をした数字を16進数に変換させ4ケタでテキストボックスに書かせたいと思っています。現在、上で述べたことは出来ているのですが、次に選択しなおしたときに前回選択して書かれた文字が残ったままになってしまっています。(例、1回目に選択した数字が44だとすると、×10をして440、それを16進数になおして01B8となります。次に50を選択すると、×10をして500、それを16進数に変換して01F4となるのですが、2回目選択した際はテキストボックスに前回選択した文字が残ってしまい、01B801F4となってしまいます。)
コンボボックスで数値を選択する度に重複することなく書き変わるようにしたいのですが、下記のプログラムをどう直せばよろしいのでしょうか。
private void cbxChange_SelectedIndexChanged(object sender, EventArgs e)
{
string tmpSet;
int tmpCh;tmpSet = cbxChange.Text;
tmpCh = int.Parse(tmpSet) * 10;
tbCommand4.Text += tmpCh.ToString("X4");
}
回答
すべての返信
-
回答ありがとうございます。
説明足らずで申し訳ないのですが、テキストボックスにすでにある文字を書かせていてその後ろに今回の16進数を表示させたかったのです。
アドバイスを参考にさせて頂き、FormのMainのところにtbCommand4.Text = "";と書き、
tbCommand4.Text += tmpCh.ToString("X4");の部分を下記のように書きなおすとうまくいきました。
tbCommand4.Text = "01103804000102" + tmpCh.ToString("X4");
どうもありがとうございました。
-
おそらく、佐祐理さんの指摘のように、考え方が安直すぎるのが原因だと思います。
以前の質問から、シリアルポートの操作をされているようです。そこから、今回の問題は、送信するパラメータをコンボボックス(ドロップダウンリスト)から選択して組み立てようとしているのだと思います。
では、「"01103804000102"」というのは、固定でいいのでしょうか?
プログラムは、開発者が意図したとおりには動きません。開発者が書いたとおりに動きます。意図と、書いたことに差があり、不都合な動作として現れたときにバグと呼びます。ということは、バグを取るためには、意図と書いたことの差を知ることが肝心です。せめてそれくらいはやってから尋ねましょう。
それと、質問の内容とタイトル「コンボボックスについて」は、一致していません。問題の分析をしましょう。
Jitta@わんくま同盟