シンプルな表示イベントなんですが分かりません への返答

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

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

投稿者 流れ者  (その他) 投稿日時 2009/12/17 02:34:50
こんばんは。

変数名の付け方の話になっているので、蛇足ながら、私を一言。

変数名をつける上で、何らかのルールを自分で決めておくと、より分かりやすいです。

たとえば、魔界の仮面弁士さんのサンプルの

注文者電話番号
届け先電話番号

の二つの変数名を

注文者_電話番号
届け先_電話番号

と変えてみると、追加で住所や氏名の情報を格納したい場合に

注文者_住所
注文者_氏名
届け先_住所
届け先_氏名

と変数名がつけられ、見やすくなると思います。

あと、a,b,c等の一文字の変数ですが、意味のある値を入れる場合は、避けるのが無難ですが、
forループの変数などの、カウンタとしての意味しか持たないものに関しては、使用したほうが
ソースが見やすくなるといったこともあります。

なんであれ、変数の付け方は”慣れと経験”の部分が大きいので、経験をつんで慣れてください。
投稿者 たまごV  (中学生) 投稿日時 2009/12/16 05:07:24
>英単語を覚えてきたら、少しずつ日本語から切り替えるといいです。>

そうしてみます。


>変数 c を用意するのは、何のためでしょうか?
>特に理由が無ければ、短く「TextBox2.Text = TextBox1.Text」の方が分かりやすいと思います。

はい、まったくそのとおりです。あくまでちょっと試してみるつもりで書いただけの目的のないコードなんです。こういうことをするにはどうすればいいのだろうと思っただけです。それで試したらなかなか変数って難しいなと思いました。まだどういう場合に変数をつけるべきか、どういう場合にはそのままテキストボックスなどを使うのか判別できていないのだと思います。



>適切な変数名を用意する事で、コードに「開発者の意図」を埋め込む事ができます。

はい。やっぱり何か目的のあるプログラムを作ってみて、開発者の意図というのを自分なりに持ってみたいと思います。



投稿者 魔界の仮面弁士  (社会人) 投稿日時 2009/12/16 04:16:20
> この感じからすると、変数cまで用意しといたほうが
変数 c を用意するのは、何のためでしょうか?

> 無難だったのでしょうか。
特に理由が無ければ、短く「TextBox2.Text = TextBox1.Text」の方が分かりやすいと思います。
その逆に、明確な理由があるならば、変数を好きなだけ使う事ができるでしょう。

ただしその時には、「TextBox1」や「c」といった名前ではなく、
出来る限り意味のある変数名を用意する事をお勧めします。
適切な変数名を用意する事で、コードに「開発者の意図」を埋め込む事ができます。


たとえば
Dim 注文者電話番号 As String
Dim 届け先電話番号 As String
という変数があって、それに対して
注文者電話番号 = TextBox1.Text
届け先電話番号 = 注文者電話番号
TextBox2.Text = 届け先電話番号
というコードが実行されるとしましょう。

こうすると、このコードを読んだ人は、
 『“注文者”の情報を、“届け先”の初期値として利用しているのだろうな』
 『これらの TextBox は、電話番号を入力するための物なのだな』
といった事を想像しやすくなります。
投稿者 葉月  (社会人) 投稿日時 2009/12/16 03:49:56
a,b,cといった変数名は、コードが長くなるとどこで使ったか分かり難くなります。
プログラムに慣れるまで日本語を使うと楽になるかも知れません。

■サンプル
Dim テキスト代入 As String = TextBox1.Text
TextBox2.Text = テキスト代入


英単語を覚えてきたら、少しずつ日本語から切り替えるといいです。
投稿者 たまごV  (中学生) 投稿日時 2009/12/16 03:21:54
>バージョン名を出来ればちゃんと書いてください。

了解しました。VB2008無料バージョンです。


>この場合、書き換えている

なるほど、ただ別の内容に上書きされてしまっただけだったのですね。ようやく納得です。


    Dim a As String
        Dim b As String 

        a = TextBox1.Text

        b = a

        TextBox2.Text = b


これで成功しました。

この感じからすると、変数cまで用意しといたほうが無難だったのでしょうか。


投稿者 魔界の仮面弁士  (社会人) 投稿日時 2009/12/15 18:42:09
> a = TextBox1.Text
> b = TextBox2.Text
> b = a

1 行目: TextBox1 の内容を、変数 a に代入。
2 行目: TextBox2 の内容を、変数 b に代入。
3 行目: 変数 a の内容を、変数 b に代入。

この場合、書き換えているのは変数 a であって、TextBox2 ではありません。
『TextBox2 の Text に代入する』ためのコードがありませんので、
TextBox2 の内容が変化することも無いというわけです。


これが、
Dim a As TextBox = TextBox1
Dim b As TextBox = TextBox2
b.Text = a.Text
であったり、あるいは、
Dim a As String = TextBox1.Text
TextBox2.Text = a
であるならば、TextBox2 にも反映されます。
投稿者 Dora  (中学生) 投稿日時 2009/12/15 17:41:22
すいません。
一番最後のところ、

b = TextBox2.Text


じゃなくて、

TextBox2.Text = b


でした…
投稿者 Dora  (中学生) 投稿日時 2009/12/15 17:39:38
こんにちは。

バージョン名を出来ればちゃんと書いてください。

たまごVさんのコード:

Dim a As String

Dim b As String

a = TextBox1.Text
b = TextBox2.Text

b = a





だと、変数bに TextBox1 のテキストが入れられるだけで、TextBox2 には反映しません。


Dim a As String

Dim b As String

a = TextBox1.Text

b = a

b = TextBox2.Text





でいけると思います。テストはしていませんが。

説明が間違ってたらすいません。
投稿者 (削除されました)  () 投稿日時 2009/12/15 17:34:26
(削除されました)
投稿者 たまごV  (中学生) 投稿日時 2009/12/15 10:38:49
ボタンクリックイベントで、テキストボックス1の入力をテキストボックス2に入れて表示させようと、まず以下のようなコードを書きました。


TextBox2.Text = TextBox1.Text


これで目的はとりあえず達成されます。



今度はそれぞれのテキストボックスを変数に入れてみました。そして同じ結果を得ようとしたのです。


    Dim a As String

        Dim b As String

        a = TextBox1.Text
        b = TextBox2.Text

        b = a



これでは何らのボタンをクリックしても変化が起きません。上のコードとまるで同じことをしているつもりなのですが、いったい何が違って、同じ結果が得られないことになっているのか教えてください。