VB6→VB2005移行におけるpopupmenu機能について

このQ&Aのポイント
  • VB6からVB2005への移行において、ポップアップメニュー機能の実装に困っています。
  • VB6のソースコードでは、Form2上で右クリック押下時にポップアップメニューを表示する処理がありますが、VB2005に移行する際に正常に動作しないことが問題となっています。
  • ヘルプや検索を調べた結果、VB2005ではContextmenuまたはContextmenustripを使用することが推奨されているようですが、別フォームを呼び出す方法について具体的な例が見つかりませんでした。実現方法を教えていただけると助かります。
回答を見る
  • ベストアンサー

VB6→VB2005移行におけるpopupmenu機能について

すみません、VB&VB.net初心者です。 VB系の経験が無いのですが、仕事で現行VB6のソースをVB2005版にポーティングすることになり、色々調べながら進めてますが、壁にあたっております。。 現在は、以下の処理で困っています。 <やりたいこと> Form2上で右クリック押下時にポップアップメニュー (別フォーム(Form1)で作成:“右クリックは無効です”)を表示 <VB6ソース> If Button = vbRightButton Then Form2.PopupMenu Form1.mnuPop End If VisualStudio2005のアップグレードウィザードを使用したところ、 「PopupMenuアップグレードされませんでした」となりました。 ヘルプや検索等調べたところ、ContextmenuまたはContextmenustripを使いましょう、 ということのようなのですが、別フォームを呼び出す例が見当たりません。 (書いてあるけどピンとこなく気付かないのかも知れませんが。。) 実現方法をご存じの方おりましたら、ご教授よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

あ゛~…ちと酔っ払ってるけど、とりあえず簡単な例を Public Class Form1 Private cms As New ContextMenuStrip Private tsmi As New ToolStripMenuItem("右クリックは無効です") Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load cms.Items.Add(tsmi) Me.ContextMenuStrip = cms End Sub End Class これで、Form1を右クリックするとコンテキストメニューが出る ContextMenuStripにToolStripMenuItemを追加して、それをForm1の コンテキストメニューに割り当ててるのが鍵 ちなみにToolStripMenuItemのフォントとかサイズも変えられるし メニューを切り分けるための線はToolStripMenuItemじゃなくて ToolStripSeparatorを使う 後は自分で調べてみてちょうだい うぃ~ ヒック

ohigechan
質問者

お礼

ご提示の例を参考に、実装できました。 ありがとうございました。

その他の回答 (1)

回答No.1

VB6での >Form2.PopupMenu Form1.mnuPop は、Form全体を呼び出すんじゃなくて、Formに設定されたメニューのみを コンテキストメニューとして表示するだけです。 そもそもVB2005とは概念自体が違います。 「Formを表示」という概念から離れましょう。 独り言: 「右クリックは無効です」だけならMessageBoxでもいいような気もするけど… そういう訳にも行かないんでしょうねぇ…

ohigechan
質問者

補足

ご回答ありがとうございます。 なにぶん素人で。。 別フォームに設定されたメニューのみを表示、ですね。 これのVB2005での実現方法をご教授いただけると幸いです。 概念が違うとのことですが、そもそも実現できないケースなのでしょうか? すみませんがご教授よろしくお願いいたします。

関連するQ&A

  • ContextMenuStripの,特定のコントロールへの関連付け?

     質問させていただきます. どうぞよろしくお願いいたします. VB2008で開発しております.  PictureBoxだけにContextMenuStripをつけたいのですが, デザイナ上でContextMenuStripを追加したところ,Formのどこを 右クリックしてもメニューが出るようになってしまいました.  特定のコントロール右クリック時のみにContextMenuStripが動く(?) ようにする方法というのがもしございましたら,是非とも ご教授いただきたくお願い申し上げます.  どうぞお願いいたします.

  • コンテキストメニュークリック時のイベントハンドラ

    C#にてフォームアプリを作成しています。 そこでツリービューに表示されたノードを右クリックしたときにコンテキストメニューが表示される ように下記のように記述しました。表示されたノードの上で右クリックすると「Export」、「Import」 というメニューが表示されます。 しかし、イベントハンドラの書き方がよくわかりません。 「Export」又は「Import」がクリックされたというイベントはどう検出すればよいでしょうか。 // ノード右クリック時の動作 private void treeView1_MouseDown(object sender, MouseEventArgs e) { // 右クリックでもノードを選択させる if (e.Button == MouseButtons.Right) { // ノードの選択 treeView1.SelectedNode = treeView1.GetNodeAt(e.X, e.Y); // コンテクストメニューの作成 ContextMenuStrip contextMenu = new ContextMenuStrip(); ToolStripMenuItem openLabel = new ToolStripMenuItem(); openLabel.Text = "Export"; ToolStripMenuItem deleteLabel = new ToolStripMenuItem(); deleteLabel.Text = "Import"; contextMenu.Items.Add(openLabel); contextMenu.Items.Add(deleteLabel); // ツリービューにコンテキストメニューを追加 treeView1.ContextMenuStrip = contextMenu; } }

  • VBでWindowsをログオフ・ログオンする方法

    VisualStudio2010(VB)で、プログラミングをしています。 フォーム上のボタンをクリックすると、自分のユーザーにロックをかけて、別のユーザーに切り替えたいのですが、できるでしょうか。 詳しい流れはこちらです。 Form1のButton1をクリック→自分のユーザーをロックする(スタートメニューでいう「ユーザーの切り替え」)→別のユーザーでログオンする(パスワードあり)→プログラムを自動起動させる ロックは、shutdown.exeを、プログラムを自動起動させるのは、ショートカットをスタートアップに作成する方法を取るつもりです。 自動でログオンする方法を教えてください。

  • vb6で文字を入力可能なコンテキストメニューの作り方を押してください。

    作成環境:VB6(SP6) 右クリックメニューの中に、 文字の入力できるコンテキストメニューを表示させるにはどうしたらいいでしょうか? もしくはVB6で作成可能でしょうか? (MicrosoftのAccessのような、右クリックして「フィルタの対象」として入力できるようなもの) 今現在は、別フォームにTextBoxだけを配置して、 FormのサイズをTextBoxに合わせてFormを呼び出しています。 よろしくお願いします。

  • C♯ 画面の排他制御法?

    C♯ NortifyIconとcontextMenuStripによる画面排他制御に関する質問です メインのフォームForm1にNortifyIconを貼り付け、そこにcontextMenuStripを繋ぎました contextMenuStripでは10ケのサブフォームForm10~19を選択し表示します Form10~19は互いに排他関係にありますので、Form10~19が選択された時にNortifyIconからcontextMenuStripを切り離します これでForm10~19が同時に表示されることはありません Form10~19が終了する時に再びNortifyIconとcontextMenuStripを結び付け、NortifyIconのクリックでcontextMenuStripを表示しForm10~19の選択を可能ならしめています ところがNortifyIconをクリックしcontextMenuStripが表示された段階で全く別な所(contextMenuStrip以外のデスクトップなど)をクリックするととcontextMenuStripは消去されます この状態ですとNortifyIconとcontextMenuStripは切り離されたままですので、これ以降Form10~19を選択することが出来ません 対策としてcontextMenuStripがクローズした時点でNortifyIconとcontextMenuStripを結び附けましたら、今度はForm10~19が選択された段階でcontextMenuStripが消えますので、NortifyIconをクリックするとForm10~19が選択可能になってしまいます ⇒ Form10~19の排他関係が守れません NortifyIconとcontextMenuStripを組み合わせた画面選択制御は極く一般的なものでしょうが、皆さまはどのようにしているか教えて頂きたいと存じます 追伸】 contextMenuStripがクローズする原因が (1)contextMenuStrip内の項目の選択 (2)それ以外の原因 と判別出来る情報がありますか? これが分かれば対処法は簡単なのですが ・・・・・・

  • [VB6] フォームを閉じる方法について

    お世話になります。 VB6で別フォームを起動する際の親フォームの閉じ方について 質問させてください。 呼び出し元フォームからShowメソッドで別フォームを起動すると、 呼び出し先のフォームでマウスのカーソルが砂時計表示になってしまいます。 (呼び出し元のフォームはUnload Meで閉じています。) [Form1の処理] Private Sub Button1_Click() Form2.Show Unload Me End Sub ※Form1は呼び出し元。Form2は呼び出し先。 原因について、どなたかご存知の方がいらっしゃいましたら、 ご教授願えますか?

  • VS C# のコンテキストの動作について

    VS C# のコンテキストの動作がうまくいきません、助けてください>< List Viewのアイテムを右クリックしたときに「アイテム名を表示させる」というコンテキストを表示し、それをクリックするとアイテム名を表示させるというプログラムを組んだのですが、一度目はうまく動作するのですが、その後、List Viewのアイテムのない場所を右クリックしてもコンテキストが表示されてしまいます。 何が原因なんでしょうか? 教えてください、お願いします。 以下コード 前略 private void ListView_MouseClick(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Right) { ConTextMenu(); } } private void ConTextMenu() { ContextMenuStrip cms = new ContextMenuStrip(); ToolStripMenuItem menu1 = new ToolStripMenuItem(); menu1.Text = "アイテム名を表示させる"; cms.Items.AddRange(new ToolStripMenuItem[] { menu1} ); menu1.Click += new EventHandler(menu_Click); this.ContextMenuStrip = cms; } private void menu_Click(object sender, EventArgs e) { string msg = sender.ToString(); if (msg == "アイテム名を表示させる") { ListViewItem item1 = new ListViewItem(); item1 = songlist.SelectedItems[0]; iname = item1.SubItems[0].Text; MessageBox.show(iname.Tostring()); }

  • VB.Net 3つのフォームのうち1つを制御できないように。。?

    VB.Net 3つのフォームのうち1つを制御できないように。。?  今晩は,いつもいつも勉強させていただいております. どうぞよろしくお願いいたします. 開発環境:VB2008+XP になります。  Form1上のButton1を押したときにForm2とForm3を 呼び出しておいて、その間Form1を制御できないように したいです。(その間Form1のコードは待機。 かつForm2とForm3はメッセージのようにForm1の下へは 移動しないようにしたいでございます)。 そこで    Sub Button1_Click(・・・     Form2.ShowDialog        :        :    End Sub などといたしますと、Form3が制御できなくなってしまいましたorz また、↓でDo~Loopで待つ方法をご親切に教えていただき http://okwave.jp/qa/q5583412.html?order=&by= うまくいきそうだったのでございますが、Form3がForm1の 後ろに隠れたりForm1をいくらでも触れてしまいます。。orz  どうにか、2つのFormだけ制御可能にしてForm1を待機させる方法は ないものでございましょうか?検索いたしておりますと 「2つのモーダルが可能かどうか~・・」といったようなQ&Aも見かけたのですが 理解できませんでしたorz  もしお詳しい方がいらっしゃいましたら、是非ともアドバイスいただきたく どうぞよろしくお願いいたします。

  • どのオブジェクトでコンテキストメニューの項目をクリックしたか?

    大変申しありません。教えていただきたいのですが、 'メインのformで動的に幾つか作成します Dim pBox As New PictureBox 'VB studioでGUIで作成したコンテキストメニューをセットします pBox.ContextMenuStrip = ContextMenuStrip のような感じ(省略してあります)作りました。 そしてpBoxを右クリックしてコンテキストメニューのイベントを受け取ったのですが sender はコンテキストメニューアイテムでした。 右クリックされたpBoxを取得したい場合はどうすればよいでしょうか? スミマセン!!よろしくお願いします。

  • VB2008でフォームに文字列をスクロールさせたい

    VB2008でフォーム上に右~左にフェイドイン、フェイドアウトする 物を作ろうとしてるのですが、どうしてもわからないので書き込みしました。 フォーム1にテキストボックスとボタンがあり、 ボタンを押す事によりテキストボックスの文字列をフォーム2の画面上に 表示し、右~左(HTMLLで言うとキーマー)に動くようにしたいのですが 右からって事は一番右の値が+だと思うのですがフォーム2は大きさを自由に 変更できるので大きさをさらに大きくした場合途中で消えてしまいます。 あと、タイマーでするとタイマーが終わるまで実行できないので 文字が流れてる間もボタンを押す事にyの値を変えて、 複数実行させたいのです。 以下が試しに書いてみたプログラムです。 Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Dim objG As Graphics objG = Form2.CreateGraphics() objG.Clear(Form2.BackColor) objG.DrawString(Text1.Text, Label1.Font, New SolidBrush(Label1.ForeColor), iLight, 50 + Form2.Width) iLight += -1 If iLight < -50 Then Timer1.Stop() End If objG.Dispose() End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Timer1.Interval = 1 Timer1.Start() End Sub すみませんがよろしくお願いします。

専門家に質問してみよう