投稿者   (社会人) 投稿日時 2012/6/16 07:18:29
> Form1のボタンを押すとForm2の背景が変わるというのはどうやってやるんでしょうか・・?
> これがどうしてもできなくて・・泣

とのことですが、「回答する側」にとっても
(’▽’)ノシ さんご自身で「出来るようになったこと」や「分かっていること」というのは
ものすごーく重要な手がかりとなります。


なので
> 1)まず Form1に対して「手作業で」背景を変えることは出来ますか?
ひとくちに背景を変えるといっても、背景色を変更するとか背景の画像を変更する
とか色々ありますが↓のページが参考になると思います。

入門講座・第3回 プロパティをいじろう
http://homepage1.nifty.com/rucio/VBNyumon/BEGIN3.htm
→フォームの背景に画像を指定する (BackgroundImageプロパティ)
→フォームの背景色を赤にする (BackColorプロパティ)、などが載っています


もし、1)が出来たとしたら、

> 2)今度は手作業ではなく「プログラムから」Form1の背景を変えられますか?
この辺りが上手くいかないのであれば、↓のページが参考になると思います。

入門講座・第4回 イベントを逃すな
http://homepage1.nifty.com/rucio/VBNyumon/BEGIN4.htm
→Form1の背景画像(Me.BackgroundImage)の設定例が載ってます

初級講座・第1回 色をあやつる
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard1.htm
→ Form1の背景色(Me.BackColor)を変更する例が載っています


さらに、2)も大丈夫!となれば

> 3)次はいよいよ「Form2を表示させる」ですが、
これはすでに 魔界の仮面弁士 さんがご紹介して下さったページが参考になりますね。
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard29.htm

#実はこの辺り↓ともビミョーに絡んできます。
> 4) Form2 の 背景を変えるには?


おそらく、ここら辺で一番混乱しちゃうのは、
どのタイミングで操作するのか、という部分ではないかと思います。
たとえば、一言で Form2を操作する、と言っても

> A) デザイン画面で(プログラムを実行する前に)、Form2の設定をしておく
> B) Form2 を表示させるタイミングで、Form2に対し何かの処理を行いたい
> C) すでにForm2 を表示している段階で、Form2に対して何か操作をしたい

などなど、それぞれで微妙にやり方が変わってきちゃうんですね。同じコードなのに
「それを何処に書くのか」で実行されるタイミングが変わってきちゃうんです。
どんな感じかと言うと、これまでに
(’▽’)ノシ さんご自身で「出来るようになったこと」を思い出していただきたいのですが、、、

> form2に画像がでるようになりましたが、
> クリックしないと画像が表示されません・・・
これはコードを「ボタンをクリックしたときに実行される場所」に書いていたからです。
、、、よね?

> できました!

また
> Form2のLabelに文字が表示されるのはどうやってやるか教えてください。
についても、るきお先生 のコード例を基に、
#Form2をはじめて表示するタイミングであれ、Button2をクリックするタイミングであれ
Form2 の Label に文字を表示することは出来ましたよね。

> できました!
> ありがとうございました。

で、このとき記述した場所こそ異なりますが、Form2 の Label に文字を表示させるコードは、どちらも
> f2.Label1.Text = "文字" 
という同じコードでした。

要するに、
同じコードでも記述する場所が違えば、実行されるタイミングも違う、、、という辺りまでは
何となーくイメージできてるんだろうな?・・・ということにして次に進みたいと思います。

#もし良く分からなかったら「分からない部分」を質問してくださいね

ひと休み


さて、上の方で紹介したページの、フォームの背景色を赤にするコードや
背景画像を設定するコードなんですが

> Me.BackColor = Color.Red
> Me.BackgroundImage = Image.FromFile("C:\Windows\大草原の風.bmp")

これらのコードは分かりますでしょうか?
もうチョッと具体的に言うと、Me ってどんな意味合いだか分かりますか?

第4回 イベントを逃すな
http://homepage1.nifty.com/rucio/VBNyumon/BEGIN4.htm
たとえば↑このページの説明では

> Me (Me = ミー)はこの場合はフォームのことです。
とありますが、これを少し具体的に言うと、Form1 の側でコードを書く場合
Me は、自分自身、つまり Form1 を意味します。・・・なのですが、もしこれが
Form2 の側でコードを書いているとしたら、Me は Form2 を意味することになります。

#この辺は大丈夫ですか?
#もし分からなかったら「どこら辺が分からないか」を質問してください

ここは「分かったよ!」ということにして次に進みますが

じゃあ、Form1 側のコードから、Form2 の側を操作する場合には、一体どうすれば良いのでしょうか、
何かアイデアは浮かびますか?想像も付きませんか?
実は(’▽’)ノシ さんは、すでに(気付かぬ内に?)そんなスゴイ(!)ことやちゃってるんです。

> f2.Label1.Text = "文字" 
というコードがそうです。

いよいよ本番!


このコードは Form1 の側に書いてますから、これをうっかり
> Me.Label1.Text = "文字"
と書いてしまえば、Form1 のラベルが書き換わってしまいます。

そこで、るきお先生 の書いたコードを、もう一度見直してみると
> Public Class Form1
>     Dim f2 As Form2
>     Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
>         f2 = New Form2
>         f2.Show()
>     End Sub
>     Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
>         f2.Label1.Text = "文字"
>     End Sub
> End Class

最初の方で
> Dim f2 As Form2

とあります。これは 
「f2 ってのは Form2 のことだからね、宜しくね!」と VB に教えている部分です。なので
> f2.Label1.Text = "文字" 
と記述すると、VBは
「あ、f2 というのは Form2 のことだよね!」と、その意味をきちんと理解して
(Form1に書いたコードなのに) Form2 側のラベルを書き換えてくれてたんですね。


・・・だとしたら、この f2 を上手く利用して、
#もちろん VBに、f2は「 Form2 のことだよ!」と教えてなきゃダメですが
たとえば ↓のような Form1 の側に書いたコードを上手に書き換えて

> Me.BackColor = Color.Red
> Me.BackgroundImage = Image.FromFile("C:\Windows\大草原の風.bmp")

望み通りに Form2 側の、背景色や、背景画像を変更させちゃうような
何か上手いアイデアは思い浮かびませんか?少しも想像が付きません?

#もし良く分からない所があったら「ココが分からない」と質問してくださいね


何だかクイズ(笑)みたいになっちゃいましたけど、
VBからの挑戦状!(?)みたいな感覚で、謎解きに挑戦してみてください。
#解けそうで解けない感じですか?もうチョッとで何かひらめきそうですか?

何はともあれ、最後まで読んで下さいまして有難うございます。

ここまで長々と読み続けて頂いたご苦労に比べれば、こんな VBの挑戦状なんて
雑作も無いことかもしれません。ただ何処か一ヶ所でも引っかかっていたりすると、
なかなか視界が開けて来なかったりするんですよね。
#ほんのチョッとしたひらめきで一気にパーッと視界が開けることもありますよ

最後にもう一度、お終いまで読んでくれて本当にありがとう!