テキストボックス内の数字が青くなるのを防ぎたい への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 るしぇ  (社会人) 投稿日時 2009/1/6 23:44:25
> 一応やっていて気づいたので、
> ここにご報告しておきます。
そういった自分で実行して気づいた点も含めての事後報告があると、
向上心がこちらに伝わり、印象が良くなります。同じハンドル名で
質問をした時に協力が得られ易くなるかもしれません。

>タブオーダーによって順番を変えることでも解決を得られました。
つまりは TextBox1 よりも先にフォーカスを受け取るコントロール
を用意したということですね?
一般には、この方法は行ないません。理由は以下になります。
・初期選択されているコントロールは意味がある。
 メッセージボックスなどは顕著ですが、デフォルトで選択する
 ことが多いボタンにフォーカスを当てておきます。そのまま
 Enter キーでボタンが押せるようにです。TextBox でも、最初に
 入力するコントロールにフォーカスを当てる為、他のコントロール
 を選択するのは望ましくないのです。
・他に依存する処理は少なくする。
 仕様変更で TextBox1 以外のコントロールが1つも無くなったら?
 結局選択解除の命令を入れることになります。他が変わっても
 変更が少ないような設計にします。
・タブオーダーは左上から順にしておく。
 …のが基本です。マウスで選択するより、キーボードで Tab 移動する
 方が速く入力できるため、Tab 移動の順番は重要です。

ボクがやるとしたら TextBox1 以外で初期選択コントロールを決めて
Select します。それだけでフォーカス移動できますから。
もしくは TextBox1.TabStop = False にしてタブ移動から外してしまう。
むしろ表示専用として Label にしてしまう…とかも考えられます。


> なお、一つのスレッドで二つの質問をしかけてしまいまして、
> 今後も何かマナーとして違うようなことがあった場合は、
> どんどん私に注意してください。
マナーの多くは、常識で考えて当然のことです。
辞書のタイトルに『国語辞典』と書いてあって、中に英和辞典が
混ざってて便利ですか?同じ意味の単語が英語でも書いてあって
分かり易いと思いますか?1つや2つなら分かり易いと感じる人も
いるかもしれません。では約12万語の単語が登録されていたら?
独和辞典と英仏辞典も混ざっていたら?

(情報系の)掲示板の質問は、後から同じ問題にぶつかった人が
検索する辞書のようなものです。後から読んで分かり易いものに
するのは他人の視点で考えればすぐに思いつくことです。

解決前に同スレで複数質問も同様。日常会話で
A「ペット飼ってたっけ?」
A「黒と茶のブチってかわいいよね?どんなのが好み?」
A「ところで車もってたっけ?何色の車?」
A「そういえば、ここ来るとき花壇があったよ。見た?」
B「黒一色」
C「やっぱ白がいいと思いました」
ABC「どれが???」
ってならない?同様の話題だからって割り込みする人も
いるけど、同様の話題だからこそ割り込まないで別スレッドに
し、リンクを貼るようにします。
# 文章の主語・述語・引用がはっきり書いてあればまだマシだけど、
# 主語・述語は省略で、無意味に全文引用する人が多いし。。

他人に注意されることを当てにせず、自分で考えるようにして
ください。
投稿者 リスナー  (学生) 投稿日時 2009/1/6 07:41:54
どうも皆さんこんばんは。


やや不可解な質問にもかかわらず、
皆さんのご指導のおかげで解決に至りました。


「選択状態になっているのでは?」というご指摘から、
解決してからも私なり考えていたところ、
ふと思いついたのですが、
タブオーダーによって順番を変えることでも解決を得られました。


はたして皆さんから見て、
これは正しいやり方と言えるのか不安なのですが、
一応やっていて気づいたので、
ここにご報告しておきます。



なお、一つのスレッドで二つの質問をしかけてしまいまして、
今後も何かマナーとして違うようなことがあった場合は、
どんどん私に注意してください。



投稿者 リスナー  (学生) 投稿日時 2009/1/6 03:02:33
>>解決前に違う質問をするのは、おやめください。
違う内容の質問は別スレッドでおこなってください。

大変失礼しました。
全部の解決のことばかりで夢中になっておりました。
おゆるしください。


選択を解除することで青色にならず計算結果を表示させることに成功しました。
皆さんのおかげです。


追加した質問ですが、やはり別スレッドを立てるべきのようですね。
コードも表示されているのでつい、こっちの方が分かりやすいと思い勇み足でした。

すぐにでも別スレッドで質問させてもらいます。
投稿者 るしぇ  (社会人) 投稿日時 2009/1/6 02:55:48
> それと問題は違うのですが型変換について一つ質問させてください。
解決前に違う質問をするのは、おやめください。
違う内容の質問は別スレッドでおこなってください。
投稿者 リスナー  (学生) 投稿日時 2009/1/6 02:45:27
それと問題は違うのですが型変換について一つ質問させてください。


「差額」は変数宣言しないとコメントしてありますが、
実は差額をデシマルで変数宣言したあと、
3枚目のテキストボックスを代入したところ、
実行の際にストリングからデシマルへの型変換は無効とされます。
どうしてなのか教えてください。



Dim Sagaku as Decimal'差額を変数宣言

Sagaku=CDec(Me.Textbox.Text)'差額にこのフォームのテキストボックスを代入する。


'売上から経費を引いて差額を計算する。

Sagaku=Uriage-Keihi


こうしたいのですが、ストリングからデシマルへの変換が無効にされます。

しかし売上と経費のステップではストリングからデシマルへの変換は有効にされています。
どうして差額を変数宣言した場合だけキャストが無効にされるのでしょう。

投稿者 るしぇ  (社会人) 投稿日時 2009/1/6 02:43:39
> どの部分のコードをあげたらよいのか分からなくて困っています。
> 三枚あるうちのどれをあげるべきでしょう?
コードを変更(コメントアウトしたり)して、原因となるコードを特定する
のもプログラマのすべき事ですが。。。

Show する前に Text を設定しておけば、デフォルトで全選択されてますね。
再現コードは
<CODE>
'// Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Form2.TextBox1.Text = "aaa"
        Form2.Show()
    End Sub
</CODE>

Show した後に Text を設定するか、鍵さんのおっしゃられるように SelectionLength を指定するか。
投稿者 リスナー  (学生) 投稿日時 2009/1/6 02:26:43
皆さんレスありがとうございます。

どの部分のコードをあげたらよいのか分からなくて困っています。
三枚あるうちのどれをあげるべきでしょう?

三枚目から前二枚を操作するソースでしたら、こちらになります。


>> 'フォームの初期化イベント
        'フォームが開いた時点でテキストボックスに計算結果が表示されているという動作。

        '変数の宣言
        Dim Uriage As Decimal '売上を変数宣言
        Dim Keihi As Decimal '経費を変数宣言

        '変数への代入

        '変数Uriageにフォーム1枚目のテキストボックスを代入します。
        Uriage = CDec(Form1.TextBox1.Text)

        '変数Keihiにフォーム2枚目のテキストボックスを代入します。
        Keihi = CDec(Form2.TextBox1.Text)

                '売上から経費を差し引く計算式
        '「差額」を変数宣言しないで3枚目のテキストボックスに単純に計算結果を入れる。
        Me.Textbox1.Text = CStr(Uriage - Keihi)



こんな感じになりますがどうでしょう。
投稿者   (社会人) 投稿日時 2009/1/6 02:17:56
こんにちは。

自分もわさびさんが仰るように、
TextBoxのTextが選択状態になっている為
色が反転していると予想しました。

試しにその計算結果が表示されるTextBoxの文字を
どこでもいいからクリックしてみてください。
これで直りませんか?

もしくは計算結果を表示したあとに
Form1.Textbox1.SelectionLength = 0

↑の処理を付け足してみてください。
投稿者 neptune  (社会人) 投稿日時 2009/1/6 02:00:06
こんにちは

るきお さんが書かれているように
>普通にプログラムしていれば字は黒いはずです
なので、
>計算結果が出るのと同時に数字が青く染まって表示されます。
を再現できる最低限のソースをUPした方が解決は早いですよ。
何らかの処理をしているはず。と推測します。
投稿者 リスナー  (社会人) 投稿日時 2009/1/6 00:42:35
レスありがとうございます。

実は説明として不十分なところがありました。
同じフォーム上に三つのテキストボックス(普通のです)を
置いたのではなくて、一個ずつ別々のフォームに置いたのです。

それと、それぞれのテキストボックスに変数をあてがっています。

こうしたところの影響があるのでしょうか。
あまり関係ないと思い、同一フォームで三つのテキストボックスを
置いたようなニュアンスで記述したのですが。

以下に少しでも可能性のありそうなものを列挙してみます。

・型の変換なども問題あるのでしょうか。
 テキストボックスをデシマル型の変数に代入していますので,

 X=CDec(Form1.Textbox1.Text)

などと記述していますが。


・あとはフォームの三枚目から一枚目と二枚目のテキストボックスを操作しています。
あまり推奨される方法ではないらしいのですが。




投稿者 わさび  (社会人) 投稿日時 2009/1/5 22:48:46
はじめましてよろしくお願いします。

バックが青で白色ということは、色の反転ですね。ドラッグ(なぞる)したときの地謡と思いますが。
私も同じように作って見ましたが、黒色になります。何が原因でしょう? コードを公開すれば分かる人がいると思います。私はVB6のことしか分かりません。
投稿者 るきお  (社会人) 投稿日時 2009/1/5 22:26:56
こんにちは。
それは普通のTextBoxですか?
どこかのサードパーティ製のコントロールですか?

普通にプログラムしていれば字は黒いはずです。

どこかに字の色を変更するコードがまぎれている可能性も疑った方がいいかもしれません。

どこから、手をつけていいのかわからないようでされば、
>テキストボックスを三つ用意して、
>一つ目と二つ目の計算結果を、
>三つ目に表示するというプログラム
をシンプルに新規に作成して、それでも色が変わるか確認してみてください。
投稿者 リスナー  (学生) 投稿日時 2009/1/5 22:19:10
皆さんこんにちは。

テキストボックスを三つ用意して、
一つ目と二つ目の計算結果を、
三つ目に表示するというプログラムについてです。


計算結果となる数字が
三つ目のテキストボックス内で
青く染まるのを防げないものでしょうか?

数字は白で数字の後ろが青くなっている感じです。


計算結果が出るのと同時に数字が青く染まって表示されます。

一個目と二個目を入力したときと同じように、
計算結果の表示の場合も、
数字を黒いまま表示させたいのです。

どうかよろしくお願いします。