DOBON.NET DOBON.NETプログラミング掲示板過去ログ

スプレッドのショートカット

分類:[.NET]

スプレッド2.5を.NETに変換したのですが、ContextMenuプロパティーがありません。
ショートカットメニューをどのように実現したらよいでしょうか?
■No6494に返信(こたろうさんの記事)
> スプレッド2.5を.NETに変換したのですが、ContextMenuプロパティーがありません。
> ショートカットメニューをどのように実現したらよいでしょうか?

ショートカットメニューとは、コンテキストメニューという解釈で宜しいでしょうか?
Spread 2.5は触ったことがないですが、MouseDown()イベントはありますよね?
あるのならば、ContextMenuクラスを使ってやれば良いと思われます。
以下は私のイメージです。

Source:--------------------------------------------------------------------

    ' プライベート メンバ として宣言
    Private mContextMenu As ContextMenu

    ' コンストラクタでContextMenuを初期化
    Private Sub New()
        mContextMenu = New ContextMenu()

        With mContextMenu.MenuItems
            .Add("切り取り(&T)", AddressOf CutFromMenu)
            .Add("コピー(&C)"  , AddressOf CopyFromMenu)
            .Add("貼り付け(&T)", AddressOf PasteFromMenu)
        End With
    End Sub

    ' マウスの右ボタンを押下した時にContextMenuを表示
    Private Sub Spread1_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles Spread1.MouseDown
        If e.Button = MouseButtons.Right Then
            mContextMenu.Show(Spread1, New Point(e.X, e.Y))
        End If
    End Sub

    Private Sub CutFromMenu(ByVal sender As Object, ByVal e As EventArgs)
        '[切り取り(&T)]選択時の処理
    End Sub

    Private Sub CopyFromMenu(ByVal sender As Object, ByVal e As EventArgs)
        '[コピー(&C)]選択時の処理
    End Sub

    Private Sub PasteFromMenu(ByVal sender As Object, ByVal e As EventArgs)
        '[貼り付け(&P)]選択時の処理
    End Sub

---------------------------------------------------------------------------
■No6495に返信(java.lang.Nullpoさんの記事)
お返事ありがとうございます。
さっそくやってみたのですが、確かにコンテキストメニューは表示されたのですが、
各メニューアイテムのEnableがFalseの状態になってます。
MenuItem1.enable=Trueとやってみたのですが、だめでした。
■No6497に返信(こたろうさんの記事)
> お返事ありがとうございます。
> さっそくやってみたのですが、確かにコンテキストメニューは表示されたのですが、
> 各メニューアイテムのEnableがFalseの状態になってます。
> MenuItem1.enable=Trueとやってみたのですが、だめでした。

それは、Spreadの上だからのような気がしますね。
何も考えずにやれば、

  mContextMenu.MenuItem(0).Enabled = True

などとする必要はないはずだからです。
残念ながら、私の手元にSpread 2.5がないので何とも言えませんが...。
(Spread は嫌いでしてインストールしたくもなかったりします;)

ContextMenuプロパティがないのならば、競合してるとも思えないし。
試しにForm上に実装を変えてみてください。
それでも、メニューがグレーダウンするようだったら、実装方法に問題があるということになりますので。

Source:--------------------------------------------------------------------

  ' Formに実装する場合
    Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles MyBase.MouseDown
        If e.Button = MouseButtons.Right Then
            mContextMenu.Show(Me, New Point(e.X, e.Y))
        End If
    End Sub

---------------------------------------------------------------------------

# 実は、私もContextMenuを触ったのは最近が初めてだったりします < なんて無責任な orz
■No6500に返信(java.lang.Nullpoさんの記事)
> それは、Spreadの上だからのような気がしますね。
ご指摘のとおりのようです。
Form上だと問題なく表示されます。

仕様変更も含め、再検討します。

いろいろありがとうございました。

DOBON.NET | プログラミング道 | プログラミング掲示板