none
コンボボックスについて RRS feed

  • 質問

  • コンボボックスに数値として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");
                 }

    2013年11月12日 11:02

回答

すべての返信

  • 足しているからでしょ→「 tbCommand4.Text += tmpCh.ToString("X4");」

    Jitta@わんくま同盟

    2013年11月12日 13:23
  • 回答ありがとうございます。

    説明足らずで申し訳ないのですが、テキストボックスにすでにある文字を書かせていてその後ろに今回の16進数を表示させたかったのです。

    アドバイスを参考にさせて頂き、FormのMainのところにtbCommand4.Text = "";と書き、

    tbCommand4.Text += tmpCh.ToString("X4");の部分を下記のように書きなおすとうまくいきました。

    tbCommand4.Text = "01103804000102" + tmpCh.ToString("X4");

    どうもありがとうございました。

    2013年11月12日 13:38
  • tbCommand4.Text = "01103804000102" + tmpCh.ToString("X4");
    そうやって安易に足す癖を直すことをお勧めします。きちんと求める文字列を一度に書式化することで問題を未然に回避でき、またコードの見通しもよくなります。ついでに処理効率も。
    tbCommand4.Text = String.Format( "01103804000102{0:X4}", tmpCh);

    2013年11月12日 22:52
  • > FormのMainのところにtbCommand4.Text = "";

    ここは不要に思われます。
    問題の本質は += していたからなので、 = にすることで置き換えになります。
    そのため、その前に = ”” でクリアする行為自体は何ら影響を与えません。


    rysa

    2013年11月13日 1:10
  •  おそらく、佐祐理さんの指摘のように、考え方が安直すぎるのが原因だと思います。

     以前の質問から、シリアルポートの操作をされているようです。そこから、今回の問題は、送信するパラメータをコンボボックス(ドロップダウンリスト)から選択して組み立てようとしているのだと思います。
     では、「"01103804000102"」というのは、固定でいいのでしょうか?


     プログラムは、開発者が意図したとおりには動きません。開発者が書いたとおりに動きます。意図と、書いたことに差があり、不都合な動作として現れたときにバグと呼びます。ということは、バグを取るためには、意図と書いたことの差を知ることが肝心です。せめてそれくらいはやってから尋ねましょう。


     それと、質問の内容とタイトル「コンボボックスについて」は、一致していません。問題の分析をしましょう。


    Jitta@わんくま同盟

    2013年11月13日 11:53