• 締切済み

モジュールでボタン操作

VB2005を使っています。 フォームにあるボタン10個のどれかのボタンを4回(1回使うとEnabled = falseになる)押すと全部のボタンが押せなくなる。 このようにしたくて、モジュールに10個のボタン全部を押せなくする関数を作りました。 Public Sub clickNg() Form.btn0.Enabled = False ・ ・ ・       Form.btn9.Enabled = False End Sub これでできていました。 しかし、新しくフォームを作ると何故か動作しなくなってしまいました。ブレークポイントで関数の動きをしらべているんですが、ちゃんと全部の工程を一通り通っています。 いったいどうしたら直るのでしょうか? 回答お願いします<(_ _)>

  • HKKMR
  • お礼率89% (120/134)

みんなの回答

  • baq777
  • ベストアンサー率28% (20/71)
回答No.1

新しいフォームを作る、という表現がイマイチわかりませんが、 Formの描画がリフレッシュされていないのでは? 内部では、Enabled=Falseになっているが、Formは再描画されて いないので、使用禁止状態になっていない・・・とか。 的外れなら、すみません。

HKKMR
質問者

補足

<新しいフォームを作る、という表現がイマイチわかりませんが ※FORM1・・・ボタンを押すとFORM2を開く ※FORM2・・・10個のボタンがある あぁ・・・FORM1でボタンを押したら、SHOW()でFORM2を開く・・・ってことをちゃんと言っとけば良かったですね・・・。 で、FORM1を最初に開くように設定すると・・・上手く動いてくれないんですよね・・・。FORM2だった場合は動くのに・・・orz そして・・・再描画の話なんですが、調べてみたんですが何か違うような・・・Form内に書いてある処理でボタンを押せなくする処理は動いているんです。しかし、モジュール内の処理の方が何故か動かない。

関連するQ&A

  • モジュール→コントロールの操作

    VB6で作られたプログラムをVB2008の言語に直しているのですが、あるモジュールから任意のフォーム(Dfrom)上にあるコントロール(Label1)を操作するプログラム?があります [VB6] Dim DForm as form Dform = TextBox1.text DForm!Label1.Caption = Msg これをVB2008で再現しようと思ったのですが、良い方法が見つかりません。 MsgをPublic変数で定義して、フォーム側からLabel1.Caption = Msgとすれば楽にいけるのですが、できるだけ元の形に近い組み方で記述したいので、良い方法をお持ちの方はご享受ください

  • フォームのイベントを標準モジュールから呼び出す

    フォームのイベントを標準モジュールから呼び出す事は出来ないのでしょうか? ちなみにアクセスです。 例えば、 Private Sub Form_Load() MsgBox "test" End Sub というのはフォームを開いたときにしか発生しないですよね。 でもフォームを開いている状態でForm_Loadと全く同じ事をしてほしい時は どうすればいいですか? 標準モジュールで Sub a() Call Form_フォーム1.Form_Load End Sub としてみましたが、メソッドまたはデータ メンバが見つかりません。 (Error 461)になりました。 MsgBox "test" だけなら、 Sub a() MsgBox "test" End Sub にすりゃいいじゃん!って思われがちですが、 実際はForm_Loadイベントにはたくさんのコードが書かれています。 標準モジュールからイベントの呼び出しを教えてください。

  • ボタン操作

    VC++2008ExpressEditionを使用してプログラムを作成しています。 Windowsフォームアプリケーションを作成し、そこに、TextBoxとButtonを放り込み、ボタンを押すと以下のようなコードが実行されるようにしました。   System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {     static bool flug=false;     if(flug)return;     flug=true;     button1->Enabled=false;     button1->Text=L"実行中";     button1->Update();     int i;     for(i=0;i<200;i++){       int t=clock();       while(10>clock()-t);       textBox4->Text+=L"aaraeaewa"+i+L"\r\n";       textBox4->SelectionStart = textBox4->Text->Length;       textBox4->ScrollToCaret();     }     button1->Enabled=true;     flug=false;     button1->Text=L"実行";   } このように設定したボタンを何回も連続して押すと、この関数を実行中は多重実行されないことを想定しているのですが、やってみると多重実行されてしまいます。 どの様にすれば多重実行しないように出来るのでしょうか? また、この関数を実行中は自分で作成したアイテムを操作することが、一切できなくなってしまうのですが、何か解決方法は無いでしょうか? 宜しくお願いします。

  • ボタンの初期化方法について

    Flash MX2004にて、動的に変化するリンクボタンを作成しております。 フレーム読み込み時に、特定のボタンを以下のようなコードで、enabled=false、色を灰色などにして、非アクティブ状態に設定する ことはできました。  obj_btn.enabled = false;  myBtn = new Color(obj_btn);  myBtn.setRGB(0xBDBDBD); //灰色 今度は、これを、以下の様なコードで元に戻そうとしているのですが、 もともとボタンに設定してあった、Mouse Over,DownなどのActionが発生しません。  obj_btn.enabled = true;  myBtn = new Color(obj_btn);  myBtn.setRGB(000000);//黒色 ボタンをもとの状態に初期化出来れば、良いと思うのですが、 どうしてもその方法が見つかりません。そもそも可能なことなのか も含めて、皆様方のお知恵を拝借いたしたく。 宜しくお願い致します。

    • ベストアンサー
    • Flash
  • 複数のフォームで共通のコマンドボタンを使いたいのですが.........

    使用OS:Win XP 使用Access Version:XP お世話になります。 http://okweb.jp/kotaeru.php3?q=1045039 この質問の続きなのですが、ここで開かれた複数のフォーム(同時には開きません。)に同じ名前でコマンドボタン(レコード移動ボタン)を配置し、共通のfunctionで処理を書きたいと思っています。 例えば Forms![F_売上伝票]![次へ].Enabled = False の[F_売上伝票]を前の質問で取得した、form_meiで置き換え、 Forms!form_mei![次へ].Enabled = False や Forms![form_mei]![次へ].Enabled = False にしたらエラーになってしまいました。 これを解決するにはどうしたら良いんでしょう。 と、ここまで書いていたら、.valueは使えないかなと考え付いたのですが、どうでしょう? 試してみますが、.valueはフォーム上のコントロールにしか使えませんでしたっけ? もう、頭がパニック状態に陥りそうです。どなたか御教授下さい。よろしくお願いします。

  • VBのフォームモジュールと標準モジュールの使い分け

    VBのフォームモジュールと標準モジュールの使い分けが今一つわかっていません。 フォームモジュールとは、フォーム(画面)上で起こったイベント(例えば、ボタンをクリックした時とか、ユーザーが行を選択したりだとか)の処理を、記述するところと解釈しています。 標準モジュールは、フォームが2つ以上あって、その2つが共通する処理(関数)などを、記述したり、フォームが1つでも、同じ処理を繰り返す場合、その処理を標準モジュールに書いたり・・・・という解釈をしています。 あってますでしょうか? フォームが一つしかない場合、もしくは2つあっても、あまり共通する処理がない場合、なんかは標準モジュールはあまり使わないのでしょうか? それとも、フォームが1つとかでも、今後のメンテの事など考慮して、標準モジュールを作ってそこにグローバル変数なんかで処理を書いた方がよいのでしょうか? どなたか、教えてくださいませんか? いろいろBBSなどで見てみるんですが、いろいろ書いてあって、どれが理想か わかりません。よろしくお願いいたします。

  • フォームモジュールが作られない

    アクセスです。 新規でフォーム1を作成し、何もしないで(いじらないで)保存し、 VBE画面でフォーム1のForm_Loadイベントにコードを記述しようと思っても、  画像のようにフォームモジュールがありません。 フォームのデザインビューから適当に何かのイベントプロシージャーのボタンを押せば、 フォームモジュールが生成されます。 これは仕様でしょうか? エクセルは最初からシートモジュールやブックのモジュールがありますよね。

  • forを使ってまとめたいのですが

    いつも、ありがとうございます。WinXP Flash8です。 forを使って40個のボタンへの _root.pB.btn_1.enabled = false; _root.pB.btn_2.enabled = false; _root.pB.btn_3.enabled = false; というスクリプトをまとめようと思いましたがうまくいきません。 for (i = 1; i <= 40; i++) { _root["pB.btn_" + i].enabled = false; } としていますが、何がぬけているかご指摘ください。 pBの前に.が必要でしょうか? それでも、うまくいかなかったのですが??? よろしく、お願いします。

    • ベストアンサー
    • Flash
  • VB6でスロットを作成したい

    VB6歴2ヶ月の初心者です。 フォーム上に ラベルコントロールが三つ コマンドボタンが二つ タイマーコントロールが一つ あります。 タイマーのプロパティは Enabled False Interval 10 です。 スロットを作成したいのですが、 ボタン1を一回押すごとに左からスロットが回り、 最後にボタン2で動きを止めたいのです。 一応自分でも書いてみたのですが、ここで行き詰まりました。 ウワァァァァァァヽ(`Д´)ノァァァァァァン! Private Sub Command1_Click() Timer1.Enabled = True End Sub Private Sub Command2_Click() Timer1.Enabled = False End Sub Private Sub Timer1_Timer() Dim slot As Integer slot = Int(Rnd(1) * 9 + 1) Label1.Caption = slot End Sub 思い通りに動かすにはどんなコードにしたらいいですか?

  • vb6.0のFormの遷移がうまくいきません。

    Form1からForm2に移動するときのプログラム Private Sub Command5_Click() Form2.Show With Form1 .Enabled = False .Visible = False End With End Sub です。 Form2からForm1に移動するときのプログラム Private Sub Command1_Click() Form1.Show With Form2 .Enabled = False .Visible = False End With End Sub Form1からForm2に移動し、Form2からForm1に移動する 事は出来たのですが。もう一度、Form1からForm2に 移動しようとするとBeep音が鳴り移動できません。 なぜ、2回目は失敗するのでしょうか? プログラムに問題はありますか?

専門家に質問してみよう