マンガでよめる痔のこと・薬のこと

VB6.0 でプログラムを作る研修(?)をしています。

使ってるテキストはVB5.0 のものなので、若干違います。

タイトルの通りなのですが、メニューエディタを使ってメニューを作成したいのです。
テキストには、ツールバーにある、と書いてあるのですが、ありません・・・
コンポーネントで追加する必要があったような記憶があるのですが、
どれを追加するのか思い出せません。

抽象的な質問で申し訳ありませんが、よろしくお願いします。補足はします。

A 回答 (1件)

フォームを右クリック

    • good
    • 1
この回答へのお礼

回答、ありがとうございました。

簡単に解決できました。

お礼日時:2003/08/11 16:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q右クリックでポップアップメニューを表示したい

Visual Basic6.0右クリック時にポップアップメニュー(コンテキストメニュー)を表示したいのですが、Webで調べてもよくわかりませんでした。メニューエディタを使って、メニューを作成することはできましたが、フォームの上段に表示されるメニューしか作成できません。MouseUpイベントを使用して右クリックを判別するところまではわかりましたが、肝心のポップアップメニューのメニューの作り方、使用方法をご存知の方いらっしゃいましたらご回答よろしくお願いします。

Aベストアンサー

参考URLでいいのかな?

参考URL:http://www.geocities.co.jp/SiliconValley/4805/vbtips/vbtips061.htm

QForm_Load と Form_Activate のタイミング

あるデータ入力アプリを作っています。
親フォーム(Form0)で番号を決め、子フォーム(Form1,Form2,Form3,Form4) でデータ入力し、それぞれの子フォームを出るとき(Unload Me) に、変数にsaveしています。それを親フォーム(Form0)で登録を選択したとき、入力データをチェックしてDBに格納しています。
すでにDB格納済のデータの場合、親フォームでDBから変数に読み込み、子フォームのForm_Loadで展開しています。
そこで困っているのは、親と子のフォームを行き来するときにデータの表示で前のが残っていたり、消えてしまったりします。
Form_LoadとForm_Activateを通過するタイミングが、ちゃんと理解できていないためコードの記述位置が不適切なのだと思います。

Form_Load と Form_Activate の実行タイミングについて、お教えください。

Aベストアンサー

Form_Loadは、フォームがロードされたときです。
ロードされる条件は、
1.フォームがスタートアップに指定されているとき、アプリが実行された直後。
2.Show メソッドが呼ばれたとき
3.Loadメソッドが呼ばれたとき
4.フォームに貼り付けられたコントロールのプロパティが参照されたとき
5.フォームに貼り付けられたコントロールのメソッドが呼ばれたとき
です。

ただし、一度ロードされると、Unloadされるまで呼ばれません。


Form_Activateは、フォームがアクティブになったとき、つまり、キャプション(ウィンドウのタイトルバー)の色が変わったときです。

QVB6 配列を初期化したい

VB6でループさせて配列に値を入れて、計算させて最終的に求めたい値をRとします。そのときループで繰り返すためか同じ配列に値を入れてどんどん値がでかくなりRの値がおかしくなってしまいます;
おそらく問題は一回前に入れた配列がそのままのこってしまってるからなのだと思うのですが;
配列の中の値をクリアする方法はないものでしょうか?
一応、配列=0として初期化しようとしても値は変わらず前のが残ったままになってしまっています;
どなたかわかる方いらっしゃいましたらご回答宜しくお願いします

その他何かいい方法があればそれも教えていただけたらと思います

Aベストアンサー

Eraceステートメントを使用

  Dim a() as Long
  Dim s(100) as String
  Dim x() as Long

  Erase a     ’要素が0になる
  Erase s     ’要素が""になる

  Redim x(100) as Long

  Erase x      ’メモリを解放

注)VB2005の場合は動作が異なるので注意して下さい。

QVB6.0-整数と余りを求める

表題の通り、整数と余りを求める関数を教えてほしいです:例:100/60=1余り40
整数:1
余り:40
よろしくお願いいたします。

Aベストアンサー

Dim A,B,C,D as integer
A=100
B=60
C=Int(A/B) <---答は1
D=A mod B

●IntはAをBで割った時の整数部分を求める関数ですが、答が負の場合は
注意が必要です。 例 Int(-100/40)=-2
これを回避する場合 Fixがいいです

●mod は A を B で割った時の余りを求める関数

Qある文字列が全て数字であるかどうかをチェックするには?

一番効率のよいと思われる方法を教えて下さい。
一つ一つ数字であるか見る方法しか思いつきません。

Aベストアンサー

Sub test01()
Dim a As String
a = InputBox("数=")
For i = 1 To Len(a)
If Asc(Mid(a, i, 1)) < 48 Or Asc(Mid(a, i, 1)) > 57 Then
MsgBox i & "字目でNon-Numeric"
Exit For
End If
Next i
End Sub

Q他のフォームから別のフォームのサブルーチンを呼び出す

例えばフォームAからフォームBのCommand1_clickというサブルーチンを呼び出そうとすればどのようにすればいいんでしょうか?

私は

Call FormB!Command_click

とフォームAに書きましたがうまくいきませんでした

Aベストアンサー

Command1のClickイベントプロシージャの

Private Sub Command1_Click()
'(・・処理・・)
End sub



Public Sub Command1_Click()
'(・・処理・・)
End sub

に書き換えて下さい(「Private」→「Public」)。
こうすることにより、他のフォームから呼ぶことが可能になります。
ただしこのやり方は奨励しません(※後述)

また、呼び出し方も間違ってます。

Call FormB!Command_click

ではなく、

Call FormB.Command_click

として下さい(「!」→「.」)。

※自動生成するイベントプロシージャの構文を直接いじるのはあまり奨励しません(特に問題は発生しませんが)。
直接イベントプロシージャを呼ぶのではなく、下記のようにしてみてはいかがでしょう。

※下記をFormBに記述

Private Sub Command1_Click()
Call subCommand1Click
End sub

Public Sub subCommand1Click()
'(・・処理・・)
End sub

FormAではこのように呼ぶ
Call FormB.subCommand1Click

Command1のClickイベントプロシージャの

Private Sub Command1_Click()
'(・・処理・・)
End sub



Public Sub Command1_Click()
'(・・処理・・)
End sub

に書き換えて下さい(「Private」→「Public」)。
こうすることにより、他のフォームから呼ぶことが可能になります。
ただしこのやり方は奨励しません(※後述)

また、呼び出し方も間違ってます。

Call FormB!Command_click

ではなく、

Call FormB.Command_click

として下さい(「!」→「.」)。

※自動生成...続きを読む

QDoEvents関数って何?

こんにちは。

VBAやプログラミングに詳しい皆様に
教えていただきたい質問があります。

cells(1,1)からcells(5000,1)までの値を消去するときに
処理の進行状況を表示するためにuserform上にプログレスバーを表示したいと思います。

そこで下記のようなコードを入力しました。

userform1.show
for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
next i
unload userform1

しかしこれだとuserformの背景が真っ白になってしまい
ラベルの文字も消えてしまいます。
そこで「EXCEL VBA パーフェクトマスター」という本を見たら

for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
DoEvents
next i
unload userform1
と入力すれば解決することがわかりました。

しかし「DoEvents」についてあまり詳しく書いていなかったのでDoEvents関数をヘルプで見ると、
「発生したイベントがオペレーティング システムによって処理されるように、プログラムで占有していた制御をオペレーティング システムに渡すフロー制御関数です。」

と書いてあるのですが正直、書いてあることがよくわかりません。

どなたかDoEvents関数について、
もう少しわかりやすく教えていただけませんか。
それから、最初に書いたコードで実行すると
ユーザーフォームの背景が真っ白になってしまう原因も
教えていただけませんか?

よろしくお願いいたします。

こんにちは。

VBAやプログラミングに詳しい皆様に
教えていただきたい質問があります。

cells(1,1)からcells(5000,1)までの値を消去するときに
処理の進行状況を表示するためにuserform上にプログレスバーを表示したいと思います。

そこで下記のようなコードを入力しました。

userform1.show
for i =1 to 5000
cells(i,1)=""
userform1.progressbar1.value=i/5000*100
next i
unload userform1

しかしこれだとuserformの背景が真っ白になってしまい
ラベルの文字も消えてしまいます。
そ...続きを読む

Aベストアンサー

簡単に言うと、
OS に制御を渡すってことです。(ヘルプそのまんま)
時間が掛かるループ処理などの場合、ループが終わるまで制御は独占されてしまいます。
ですのでループ中は OS や Excel そのものにも再描画をさせる暇さえ与えません。
途中に DoEvents を入れると制御が OS に渡るので、OS は溜まっていた処理をそこで行うことができます。
結果、フォームの再描画などが行われることになります。

注意点ですが、
Private Sub CommandButton1_Click()
  Dim i As Long

  For i = 1 To 50000
    DoEvents
    Cells(i,1) = ""
  Next i
End Sub

Private Sub CommandButton2_Click()
  MsgBox "hoge"
End Sub

っていうフォームのコードがあった場合、
DoEvents を入れることによって、ループ中にユーザーがCommandButton2 を押すことによって CommandButton2 のクリック イベントも動いちゃいます。
CommandButton1 のクリック イベントではループの前に
CommandButton1.Enabled = False
CommandButton2.Enabled = False
を書いてフォーム上の CommandButton を無効にしておき、ループが終わったら
CommandButton1.Enabled = True
CommandButton2.Enabled = True
と書いて CommandButton を有効に戻してください。

これを工夫すれば、CommandButton2 で CommandButton1 のループを途中キャンセルする処理もすることができます。

Private Canceled As Boolean

Private Sub CommandButton1_Click()

  CommandButton2.Enabled = False

  Dim i As Long
  For i = 1 To 50000
    DoEvents

    If Canceled = True Then
      MsgBox "キャンセルしました"
      Exit Sub
    End If

    Cells(i, 1).Value = ""
  Next i
End Sub

Private CommandButton2_Click()
  Canceled = True
End Sub



コードの行頭にあるスペースは見易さのために全角スペースで作成していますので、これをこのままコピペするとエラーになるかもしれません。
コピペするなら行頭の全角スペースを半角スペースに直してください。

簡単に言うと、
OS に制御を渡すってことです。(ヘルプそのまんま)
時間が掛かるループ処理などの場合、ループが終わるまで制御は独占されてしまいます。
ですのでループ中は OS や Excel そのものにも再描画をさせる暇さえ与えません。
途中に DoEvents を入れると制御が OS に渡るので、OS は溜まっていた処理をそこで行うことができます。
結果、フォームの再描画などが行われることになります。

注意点ですが、
Private Sub CommandButton1_Click()
  Dim i As Long

  For i = 1 To 50000
...続きを読む

Q【VB6.0】 あるフォームから他のフォームへ値を受け渡したい

タイトルの通り、あるフォームから他のフォームに値の受け渡しを行いたいのですが、どのようにしたらよいのでしょうか??

以下のようなコードできんのかなぁ~~って、やったみだけど、
むりでした。。サンプルコード内でいうParamsのような値を
受け渡しさせたいのですが・・・。ご存知の方、申し訳ないですが
教えて頂けると非常にありがたいです。それと、、私はVB初心者です。

---FormA---
Public Params as new Params

Private sub Command1_Click()
Call Me.Hide
FormB.Show vbModeless, Me
End sub

---FormB---
Private Sub Form_Load()
'Owner.Paramsのような形で参照できるかと思ったができませんでした。

End sub

Aベストアンサー

こんにちは。

 下記サイトをご参照下さい。
  http://www005.upp.so-net.ne.jp/h-masuda/vb6/vb6first/forms040.html
   簡単に渡すには、グローバル変数を使えばよいと思います。
   別な方法では、FprmAにPrrams変数を参照するためのPublic関数を作り、FormBからその関数を呼び出して参照することも出来ると思います。

では。

QVisual Basic 6.0 コンボボックスのChangeイベントが発生しません

VB6.0を使用しておりますが、
コンボボックスのリストから選択して値を変更しても
Changeイベントが発生しないです。
コンボボックスの入力欄に直接入力した場合はChangeイベントは
発生します。
リストから選択して、Changeイベントを発生されるには
どうしたら良いでしょうか?

Aベストアンサー

'コンボボックスに追加
Private Sub Form_Load()
Combo1.AddItem "AAA"
Combo1.AddItem "BBB"
Combo1.AddItem "CCC"
End Sub
'コンボボックスの入力欄に直接入力した場合
Private Sub Combo1_Change()
Debug.Print Combo1.Text
End Sub

'リストから選択して、Changeイベントを発生
Private Sub Combo1_Click()
Call Combo1_Change
End Sub

QVB6のユーザーコントロールの受け渡しでプロパティ

自作のユーザーコントロールをフォームに貼り付け、
それをクラスに渡してクラス内でそのコントロールのVisibleを制御しようとしておりますが、

フォームからコントロールのVisibleプロパティにアクセスできますが、
クラスからだと、
メソッドまたはデータメンバが見つかりません
とコンパイルエラーが出ます。

そこで、コントロールをControlやUserControlにキャストしてみましたが
型が一致しません
というエラーとなってしまいます。

コントロールにVisibleプロパティの追加を試みましたが、
ActiveXコントロールインタフェースウィザードの使用できる名前に於いて
それらのプロパティが列挙されません。

対象がユーザーコントロールでなく、ボタンなどの標準コントロールの場合は
できたのですが・・・

なにか方法をご存知でしたらご教授ください。

Aベストアンサー

Visibleプロパティを管理しているのがコンテナ側だからですよ
FormやPictureBoxはコンテナになりますのでフォームにはったUserControlの場合はVisibleプロパティが操作可能です

クラスに渡した UserControlですとこのコンテナが提供するExtenderプロパティを直接操作することが出来ないのではと思います


UserControlにVisibleを操作するプロパティを追加してみましょう

private bVisible as Boolean
Public Property Let MyVisible(value as Boolean)
  bVisible = value
  ' Extenderを通してVisibleを操作
  Extender.Visible = value
  PropertyChanged "MyVisible"
End Property

Public Property Get MyVisible() as Boolean
  MyVisible = bVisible
End Property

Private Sub UserControl_InitProperties()
  ' プロパティの初期化
  bVisible = Extender.Visible
End Sub

Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
  bVisible = PropBag.ReadProperty("MyVisible", Extender.Visible)
End Sub
Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
  PropBag.WriteProperty "MyVisible", bVisible, Extender.Visible
End Sub
といった具合のコードを追加しておきます

クラス側では
obj.MyVisible = True
または
obj.MyVisible = False
といった具合で操作してみましょう

Visibleプロパティを管理しているのがコンテナ側だからですよ
FormやPictureBoxはコンテナになりますのでフォームにはったUserControlの場合はVisibleプロパティが操作可能です

クラスに渡した UserControlですとこのコンテナが提供するExtenderプロパティを直接操作することが出来ないのではと思います


UserControlにVisibleを操作するプロパティを追加してみましょう

private bVisible as Boolean
Public Property Let MyVisible(value as Boolean)
  bVisible = value
  ' Extenderを通してVisibleを操...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング