またまたよろしくお願いします。
form1にテキストボックスとコマンドボタンを用意します。
それでテキストボックスに何もかかれていなかった場合、ボタンが押せないというイベントを起こしたいのですが、できません。
どなたかよろしくお願いします。
各やりたいことの書き方はお分かりですか?
分かっていなければ、どれが分かりませんか?
1.テキストボックスに何か書かれているか?
2.コマンドボタンを押せなくする
3.1を調べるタイミング
分かっていれば、
テキストボックスのChange イベントで
Text プロパティを見て何もかかれていなかった場合
コマンドボタンのEnabled プロパティをFalseにすれば良いです。
何か書かれていればEnabled プロパティをTrueに
追記
すいません。ぜんぜんたりませんでした。
Private Sub form_load()
If Text1.Text = "" Then
Command1.Visible = False
Else
Command1.Visible = True
End If
End Sub
Private Sub commmand1_click()
If Text1.Text = 1 Then
a = a + 1
End If
Label1.Caption = a
End Sub
このようにテキストボックスに何も書かれていない場合、ボタンが表示されず
それ以外のときは表示されるということになっていると思うんですが・・・
あともしテキストボックスに1と書かれた場合ラベルにaを表示させるということになっているはずなのですが、なりません。
どうかお願いします。
なにか書かれていればというのはどういう風に書けばいいのでしょうか?
なにも書かれていない場合は""であっていると思うんですが・・・
ま,まさかとは思うが,
command1_click()
が
commmand1_click()
になってるから,
なんてことはないんだろうなぁ?
ついでに・・・,From_Load で Text1.Text の内容を訊いてるけど,
誰が Text1.Text に値をいれるんだ?
あと,それ,Text1 に数字以外がはいってると error に
なるけど,きっとそれでもいいんだろうね・・・
>>なにも書かれていない場合は""であっていると思うんですが・・・
記述はいいのですが、記述する場所が問題です。
form_load()で判断していますが、それだとフォームを開いた時にしか動きませんです。
okuさんが書かれていますが、この場合は、Text1.Textに何かが入力されてから
何か書かれているか判断すればいいはずです。
各イベントにMsgboxでも仕込んで、何をしたときにどのイベントが発生するか
調べるといいと思います。
なるほど・・・このように書いてもなりませんでしたがなぜでしょうか?
Private Sub Command1_Click()
Label1.Caption = a
End Sub
Private Sub Text1_Change()
If Text1.Text = "" Then
Command1.Enabled = False
Else
Command1.Enabled = True
End If
If Text1.Text = 1 Then
a = a + 1
End If
End Sub
まず、自分のやりたいことを日本語で紙にかくなり、
なんなりしてはっきりと把握してください。
そしてそのとおりにコーディングをしてみてください。
私もわからないときは、よくそうしてますので。
たとえば、下記のことに注意してコーディングをしてみてください。
1.テキストボックスが空ならボタンは非表示
2.フォームがロードされた時はテキストボックスは空だからボタンは非表示
3.テキストボックスに何か入力されたらボタンを表示
4.ボタンを押されたらラベルにaを表示
正解に近づいているとは思いますが、
そのソースではコンパイルエラーになりますね?
確認なのですが、
a = a + 1 とありますが、これは Text1.Text = 1の場合に
変数 a をカウントアップしていくということでいいのでしょうか?
仮にそうだとした場合に、 Command1_Click()で
Label1.Caption = a を実行していますが、変数 a はこのままでは
Command1_Click()で参照できません。
参照したいのであれば、General に Private a As Integerなどで定義しましょう。
それと
>>このように書いてもなりませんでしたがなぜでしょうか?
とかかれても、これを読んだ人にはどこが「ならない」のかいまいちわかりません。
なので、現時点で「どうならない」のか記述したほうがいいと思います。
Command1の.Enabled制御はうまくいったが、
Command1をクリックしてもなにも表示されないとか・・・
このようにしてみましたが・・・
Private Sub Command1_Click()
Label1.Caption = v
End Sub
Private Sub Text1_Change()
If Text1.Text = "" Then
Command1.Enabled = False
Else
Command1.Enabled = True
End If
If Text1.Text = 1 Then
v = v + 1
End If
End Sub
標準モジュール
public v as integer
このようにしたらラベルに1は表示されますがEnabled制御がうまくいきません。
ボタンが押せてしまいます。後はenabledだけですがなりません・・・
Enabled制御ですが、
現時点のソースでは実行時はボタンが押せます。
実行時に押せなくしたいのであれば下記のいずれかを行う。
1.Form_load()にCommand1.Enabled = Falseを記述する。
2.Command1のEnabledプロパティをFalseにする。
いままのままでも何か入力してから削除すればボタンは押せなくなるので、
後はどういう動きにしたいかですね。
ラベルに1は表示されるがボタンは押せるというのは、
ボタンを押すからラベルに値が表示されるわけですから
Command1_Click()でCommand1.Enabled = Falseを行えば押せなくはなります。
しかし、このままではText1に値が入力されたままになるので
さらに、Text1.Text = "" するとか。
違うかな?
私にはどういう状態(処理後)の時にEnabled = Falseになっていなければいけないのか
いまいち分かりませんので、この辺を説明していただければ・・・
プログラムの仕様ですね。
算数問題集のプログラムで例えば1+1+1という問題があり
form_loadのときはコマンドボタンがfalse
それでテキストボタンに数字が入ればコマンドボタンがtrueになり
テキストボックスに3と入力されてコマンドボタンを押すとラベルに1と表示させる
というものをつくりたいのです。
でもなかなかならないのです。
>>form_loadのときはコマンドボタンがfalse
Private Sub Form_Load()
Command1.Enabled = False
End Sub
>>テキストボタンに数字が入ればコマンドボタンがtrueになり
If IsNumeric(Text1.Text) = True Then
Command1.Enabled = True
Else
Command1.Enabled = False
End If
>>テキストボックスに3と入力されてコマンドボタンを押すとラベルに1と表示させる
ここよく分からないのですが、
答えを入力して正解だったらラベルに1を表示ってこと?
仮にそうだとした場合(違う気がするけど・・・)
If Text1.Text = 3 Then
Label1.Caption = 1
End If
v = v + 1が気になるな・・・
これは何がしたいのでしょ?
ミスった。 Private Sub忘れてました。
Private Sub Text1_Change()
If IsNumeric(Text1.Text) = True Then
Command1.Enabled = True
Else
Command1.Enabled = False
End If
End Sub
Private Sub Command1_Click()
If Text1.Text = 3 Then
Label1.Caption = 1
End If
End Sub
あっできました。本当に皆さんどうもわかりにくい説明&長い時間に
付き合っていただきましてありがとうございました。
本当にこの掲示板はすごい方があつまってらっしゃいますね。(自分の質問は低レベルですが)
こんな自分でよろしければまたお願いします。