- PR -

各Formの引用の仕方に原因あり?

投稿者投稿内容
Nakata
常連さん
会議室デビュー日: 2004/03/30
投稿数: 41
投稿日時: 2004-05-01 05:24
連続投稿すいません。


Form2で

#Region " Windows フォーム デザイナで生成されたコード "
Public Form1 As Form1
(省略)
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim iP As Single
Dim P As Single
Dim day As Single
TextBox1.Text = iP
Form1.Label2.Text = day
P = day * (100 - iP)
Form1.Label5.Text = P
End Sub

Form1.Label2.Text = dayでエラーが出てしまうのですが原因がわかりません。
よろしくお願いします。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-05-01 08:19
まず、エラーの内容を書いてください。
この掲示板を見ている方たちは、テンペストを用いてNakataさんのパソコンの画面を見ているわけではありません。
こちらを参考にするとよろしいかと。
http://www.hyuki.com/writing/techask.html


で、本題ですが、NakataさんはVBをやってらした方ですね?

Form1は型です。(つまりクラス名)
Label2はForm1型のメンバでしょうか。
そうではなくてForm1型のインスタンスのメンバなのではないですか?

Button1のTextを書き換えるのに、
Button.Text = "〜"
とはしませんよね。Button1のTextなのですから
Button1.Text = "〜"
とするはずです。
ですから、Form1型のインスタンスのLabel2にアクセスしたいなら。
Form1.Label2
ではなく
Form1型のインスタンス.Label2
としなければなりません。

つまり、Label2を書き換えたいForm1型のインスタンスへの参照を持っていなければ、書き換えることは出来ないということです。

「クラス・インスタンス」や「値型・参照型」辺りの概念の理解を深めるとよろしいかと思います。
rucio
ベテラン
会議室デビュー日: 2002/11/27
投稿数: 98
投稿日時: 2004-05-01 09:24
Newしないとダメです。

たとえば
Public Form1 As Form1
この行を
Public Form1 As New Form1
とすると上手くいきませんか?

VB6に比べると面倒くさいですよね。
これがオブジェクト指向なんでしょうけど。
次期VBではVB6時代に戻って
普通にForm1.Label2.Text = dayなどと書けるようになるようです。
Nakata
常連さん
会議室デビュー日: 2004/03/30
投稿数: 41
投稿日時: 2004-05-01 10:29
>rucioさん
>Public Form1 As New Form1
一応、途中経過を報告します。
New を入れて実行してみたところ、(day=1に設定)TextBox1.Textにいくら数字を
入れても0になってしまいました。

>一郎さん
「クラス・インスタンス」や「値型・参照型」辺りの概念をまったく理解していません。Form1型のインスタンス.Label2 とはどういうことでしょうか?
少し自分でも調べてみます。
rucio
ベテラン
会議室デビュー日: 2002/11/27
投稿数: 98
投稿日時: 2004-05-01 11:05
>New を入れて実行してみたところ、(day=1に設定)TextBox1.Textにいくら数字を入れても0になってしまいました。

多分、
1.Form1を表示(または、はじめに自動的に表示される)

2.Form2を表示

3.Form1のTextBox1.TextにDayを代入

という順番で実行しているのではないですか?

だとすると 3 で New(インスタンシング)したフォームにいくら命令しても
1 のフォームには影響しません。
Nakata
常連さん
会議室デビュー日: 2004/03/30
投稿数: 41
投稿日時: 2004-05-01 11:58
>3.Form1のTextBox1.TextにDayを代入
1・2はその通りです。
3はForm2上のコードで
Form1.Label2.Text = day
と入力しています。
Form1ではdayは出てきません。
しかし何故、反映されずにform2のTextBox1.Text
が0になるのでしょうか。
わかりにくい説明ですいません。
rucio
ベテラン
会議室デビュー日: 2002/11/27
投稿数: 98
投稿日時: 2004-05-01 12:39
多分異なるインスタンス(別途Newしたもの)に命令しているせいだと思いますが
はなしが混乱してきてしまいました。

>form2のTextBox1.Textが0になるのでしょうか。
これは、最初にお尋ねになっている現象とは別の現象ですか?
はじめはform1のLabel2に値をセットするコードでしたよね?

>TextBox1.Textにいくら数字を入れても0になってしまいました。
これはプログラムから値をセットしているということですよね?
0 になる前はなにか別の値が入っているのですか?
このTextBox1はどちらのフォームのものですか?






Nakata
常連さん
会議室デビュー日: 2004/03/30
投稿数: 41
投稿日時: 2004-05-01 12:46
>はじめはform1のLabel2に値をセットするコードでしたよね?
今もそうです。コードは最初の質問からNewしか入力していないのですが
Form2のTextBox1.Textに0が出てきてしまいます。(最初は00)
P = day * (100 - iP)   ipはForm2のTextBox1.Text
P = 1 * (100 - 30)

Form1.Label5.Text にPを反映したいだけなのですが・・・。
少し出かけるので返信が夜中になると思います。

スキルアップ/キャリアアップ(JOB@IT)