押せなくする

解決


マサ  2004-02-23 06:44:47  No: 112003  IP: [192.*.*.*]

またまたよろしくお願いします。
form1にテキストボックスとコマンドボタンを用意します。
それでテキストボックスに何もかかれていなかった場合、ボタンが押せないというイベントを起こしたいのですが、できません。
どなたかよろしくお願いします。

編集    削除
oku  URL  2004-02-23 07:07:08  No: 112004  IP: [192.*.*.*]

各やりたいことの書き方はお分かりですか?
分かっていなければ、どれが分かりませんか?
1.テキストボックスに何か書かれているか?
2.コマンドボタンを押せなくする
3.1を調べるタイミング

分かっていれば、
テキストボックスのChange イベントで
Text プロパティを見て何もかかれていなかった場合
コマンドボタンのEnabled プロパティをFalseにすれば良いです。
何か書かれていればEnabled プロパティをTrueに

編集    削除
マサ  2004-02-23 07:07:55  No: 112005  IP: [192.*.*.*]

追記
すいません。ぜんぜんたりませんでした。

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を表示させるということになっているはずなのですが、なりません。
どうかお願いします。

編集    削除
マサ  2004-02-23 07:13:32  No: 112006  IP: [192.*.*.*]

なにか書かれていればというのはどういう風に書けばいいのでしょうか?
なにも書かれていない場合は""であっていると思うんですが・・・

編集    削除
punto  2004-02-23 11:49:01  No: 112007  IP: [192.*.*.*]

ま,まさかとは思うが,
command1_click() 

commmand1_click()
になってるから,
なんてことはないんだろうなぁ?

ついでに・・・,From_Load で Text1.Text の内容を訊いてるけど,
誰が Text1.Text に値をいれるんだ?

あと,それ,Text1 に数字以外がはいってると error に
なるけど,きっとそれでもいいんだろうね・・・

編集    削除
アッガイ  2004-02-24 00:41:19  No: 112008  IP: [192.*.*.*]

>>なにも書かれていない場合は""であっていると思うんですが・・・
記述はいいのですが、記述する場所が問題です。

form_load()で判断していますが、それだとフォームを開いた時にしか動きませんです。

okuさんが書かれていますが、この場合は、Text1.Textに何かが入力されてから
何か書かれているか判断すればいいはずです。

各イベントにMsgboxでも仕込んで、何をしたときにどのイベントが発生するか
調べるといいと思います。

編集    削除
マサ  2004-02-24 03:51:37  No: 112009  IP: [192.*.*.*]

なるほど・・・このように書いてもなりませんでしたがなぜでしょうか?

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

編集    削除
長谷川  2004-02-24 04:22:39  No: 112010  IP: [192.*.*.*]

まず、自分のやりたいことを日本語で紙にかくなり、
なんなりしてはっきりと把握してください。
そしてそのとおりにコーディングをしてみてください。
私もわからないときは、よくそうしてますので。

たとえば、下記のことに注意してコーディングをしてみてください。

1.テキストボックスが空ならボタンは非表示
2.フォームがロードされた時はテキストボックスは空だからボタンは非表示
3.テキストボックスに何か入力されたらボタンを表示
4.ボタンを押されたらラベルにaを表示

編集    削除
アッガイ  2004-02-24 17:56:38  No: 112011  IP: [192.*.*.*]

正解に近づいているとは思いますが、
そのソースではコンパイルエラーになりますね?

確認なのですが、
a = a + 1  とありますが、これは Text1.Text = 1の場合に
変数 a をカウントアップしていくということでいいのでしょうか?

仮にそうだとした場合に、 Command1_Click()で
Label1.Caption = a  を実行していますが、変数 a はこのままでは
Command1_Click()で参照できません。
参照したいのであれば、General に Private a As Integerなどで定義しましょう。

それと
>>このように書いてもなりませんでしたがなぜでしょうか?
とかかれても、これを読んだ人にはどこが「ならない」のかいまいちわかりません。
なので、現時点で「どうならない」のか記述したほうがいいと思います。

Command1の.Enabled制御はうまくいったが、
Command1をクリックしてもなにも表示されないとか・・・

編集    削除
マサ  2004-02-24 19:04:20  No: 112012  IP: [192.*.*.*]

このようにしてみましたが・・・

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だけですがなりません・・・

編集    削除
アッガイ  2004-02-24 19:33:11  No: 112013  IP: [192.*.*.*]

Enabled制御ですが、
現時点のソースでは実行時はボタンが押せます。
実行時に押せなくしたいのであれば下記のいずれかを行う。
  1.Form_load()にCommand1.Enabled = Falseを記述する。
  2.Command1のEnabledプロパティをFalseにする。

いままのままでも何か入力してから削除すればボタンは押せなくなるので、
後はどういう動きにしたいかですね。

ラベルに1は表示されるがボタンは押せるというのは、
ボタンを押すからラベルに値が表示されるわけですから
Command1_Click()でCommand1.Enabled = Falseを行えば押せなくはなります。
しかし、このままではText1に値が入力されたままになるので
さらに、Text1.Text = ""  するとか。

違うかな?

私にはどういう状態(処理後)の時にEnabled = Falseになっていなければいけないのか
いまいち分かりませんので、この辺を説明していただければ・・・
プログラムの仕様ですね。

編集    削除
マサ  2004-02-24 23:05:35  No: 112014  IP: [192.*.*.*]

算数問題集のプログラムで例えば1+1+1という問題があり
form_loadのときはコマンドボタンがfalse
それでテキストボタンに数字が入ればコマンドボタンがtrueになり
テキストボックスに3と入力されてコマンドボタンを押すとラベルに1と表示させる
というものをつくりたいのです。
でもなかなかならないのです。

編集    削除
アッガイ  2004-02-24 23:50:36  No: 112015  IP: [192.*.*.*]

>>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が気になるな・・・
これは何がしたいのでしょ?

編集    削除
アッガイ  2004-02-24 23:54:41  No: 112016  IP: [192.*.*.*]

ミスった。  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

編集    削除
マサ  2004-02-25 00:05:31  No: 112017  IP: [192.*.*.*]

あっできました。本当に皆さんどうもわかりにくい説明&長い時間に
付き合っていただきましてありがとうございました。
本当にこの掲示板はすごい方があつまってらっしゃいますね。(自分の質問は低レベルですが)
こんな自分でよろしければまたお願いします。

編集    削除