Menus and Toolbars for WinForms
コントロールに C1ContextMenu の追加
タスク別ヘルプ > C1ContextMenu のタスク > コントロールに C1ContextMenu の追加

コントロールに C1ContextMenu をデザイナまたはコードで追加することができます。下記のリンクをクリックしてそれぞれの手順を参照できます。

設計時にコントロールに C1ContextMenu を追加する

コンテキストメニューを作成してメニュー項目に関連付けるには、次のタスクを実行します。

注意:この例では、C1ContextMenu をメニュー項目に関連付けます。
  1. C1MainMenu をフォームに配置し、[新規コマンド]を右クリックした後で、コンテキストメニューから[編集]を選択します。[コマンドの編集]ダイアログボックスが表示されます。
  2. コマンドの編集]ダイアログボックスで、次のフィールドプロパティを変更し、《OK》をクリックします。
    • Command Text – ファイル
    • Command Name - MenuFile
    • Command Type - C1Command
  3. これにより、コンテキストメニューとして使用できるサブメニューを備えたコマンドが作成されます。[コマンドの編集]ダイアログボックスで《OK》を選択します。[ファイル]という新しい C1MainMenu が表示されます。
  4. ファイル]メニューで[新規コマンド]項目を右クリックし、コンテキストメニューから[編集]を選択します。[コマンドの編集]ダイアログボックスでプロパティを次のように設定します。
    • Command Text – 新規作成
    • Command Name - cmdFileNewo
    • Command Type - C1Command
  5. 新規コマンドの作成]リストボックスから C1CommandControlを選択します。
  6. 《OK》をクリックします。
  7. 新規作成]メニューを右クリックし、コンテキストメニューから[項目の追加]を選択した後で、[コマンドの編集]ダイアログボックスでプロパティを次のように設定します。
    • Command Text – 開く
    • Command Name - cmdFileOpent
    • Command Type - C1Command
  8. [プロパティ]のドロップダウンリストから c1CommandControl1を選択した後、Control プロパティを選択し、ドロップダウンリストから comboBox1を選択します。
  9. 《OK》をクリックします。
  10. ツールボックスから「Windows フォーム」タブを選択し、ドラッグ&ドロップ操作でフォームに RichTextBox コントロールを配置します。
  11. プロパティ]ドロップダウンリストボックスから richTextBox1 コントロールを選択し、その Dock プロパティを Fill に設定します。
  12. [プロパティ]ドロップダウンリストから[MenuFile]を選択し、Category プロパティを選択して、そのボックスに「ファイル」と入力します。
  13. [プロパティ]ドロップダウンリストで[richTextBox1]を選択し、c1CommandHolder1 上の C1ContextMenu プロパティを選択し、次に[MenuFile]を選択します。
  14. アプリケーションを実行し、リッチテキストボックス内の任意の位置でマウスを右クリックします。[ファイル]メニューのコンテキストメニューが次の図のように表示されます。

プログラムでコントロールに C1ContextMenu を追加する

C1ContextMenu をコントロールに追加するには、次の手順に従います。

  1. C1.Win.C1Command をソリューションエクスプローラにある参照プロジェクトにアタッチし、C1.Win.C1Command 名前空間をソースファイルに追加します。
  2. ドラッグ&ドロップ操作で TextBox コントロールをフォームに配置します。
  3. コマンドを保持する  C1CommandHolder を作成するには、フォームコントロールをダブルクリックして Form_Load イベントハンドラを作成し、次のコードを追加します。 
    注意:フォームに複数のコマンドホルダを作成する場合は、try/catch を使用します。これにより、他のコマンドホルダを作成する2回目の試行が失敗したときに発生する例外をキャッチして無視できます。

    Visual Basic コードの書き方

    Visual Basic
    コードのコピー
    Dim ch As C1.Win.C1Command.C1CommandHolder
    ch = C1CommandHolder.CreateCommandHolder(Me)
    

    C# コードの書き方

    C#
    コードのコピー
    C1CommandHolder ch = C1CommandHolder.CreateCommandHolder(this)
    
  4. コピーコマンドを作成して設定した後で、Click イベントを使用して、メニュー項目がクリックされたときにコピーコマンドを実行します。また、コマンドにクエリーハンドラを設定して、C1command によってコマンドの最新状態が自動的に維持されるようにします。フォームロードイベントハンドラに次のコードを追加します。

    Visual Basic コードの書き方

    Visual Basic
    コードのコピー
    'コピーコマンドを作成し、設定します。
    Dim cmdCopy As C1Command = ch.CreateCommand()
    cmdCopy.Text = "コピー"
    AddHandler cmdCopy.Click, AddressOf clickCopy
    AddHandler cmdCopy.CommandStateQuery, AddressOf queryCopy
    

    C# コードの書き方

    C#
    コードのコピー
    // コピーコマンドを作成し、設定します。
    C1Command cmdCopy = ch.CreateCommand();
    cmdCopy.Text = "コピー" cmdCopy.Click += new C1.Win.C1Command.ClickEventHandler(clickCopy) cmdCopy.CommandStateQuery += new C1.Win.C1Command.CommandStateQueryEventHandler(queryCopy)
  5. コピーコマンドを保持するコンテキストメニューを作成し、そのコンテキストメニューをテキストボックスコントロールに割り当てます。コンテキストメニューを作成するには、C1CommandHolder 内にコマンドを作成し、それをコンテキストメニューに割り当てる必要があります。C1CommandHolder クラスの CreateCommand メソッドと SetC1ContextMenu メソッドを使用します。フォームロードイベントハンドラに次のコードを追加します。 

    Visual Basic コードの書き方

    Visual Basic
    コードのコピー
    Dim cm As C1ContextMenu = Ctype(ch.CreateCommand(GetType(C1ContextMenu)), C1ContextMenu)
    'コマンドへのリンクを挿入します。
    cm.CommandLinks.Add(New C1CommandLink (cmdCopy))
    ch.SetC1ContextMenu(TextBox1, cm)
    

    C# コードの書き方

    C#
    コードのコピー
    C1ContextMenu cm = ch.CreateCommand(typeof(C1ContextMenu)) as C1ContextMenu
    //コマンドへのリンクを挿入します。
    cm.CommandLinks.Add(new C1CommandLink(cmdCopy))
    ch.SetC1ContextMenu(textBox1, cm)
    
  6. clickCopy メソッドを呼び出して、コピーコマンドアクションを処理します。queryCopy メソッドを使用して、コピーコマンドの現在の状態を取得します。コンテキストメニューからコピーコマンドをクリックすると、現在のテキストがテキストボックスにコピーされます。それには、次のコードを使用します。

    Visual Basic コードの書き方

    Visual Basic
    コードのコピー
    Private Sub clickCopy(ByVal sender As Object, ByVal e As C1.Win.C1Command.ClickEventArgs)
       Me.textBox1.Copy()
    End Sub
    
    'コピーコマンドの現在の状態を取得します。
    Private Sub queryCopy(ByVal sender As Object, ByVal e As C1.Win.C1Command.CommandStateQueryEventArgs)
       e.Enabled = Me.textBox1.SelectionLength > 0 
    End Sub
    

    C# コードの書き方

    C#
    コードのコピー
    Private Sub clickCopy(ByVal sender As Object, ByVal e As C1.Win.C1Command.ClickEventArgs)
        {
            this.textBox1.Copy()
        }
    
    //コピーコマンドの現在の状態を取得します。
    
    Private Sub queryCopy(ByVal sender As Object, ByVal e As C1.Win.C1Command.CommandStateQueryEventArgs)
        {
            e.Enabled = Me.textBox1.SelectionLength > 0 
        }
    
  7. アプリケーションを保存し、実行します。テキストボックスにテキストを入力した後で、テキストを右クリックしてコンテキストメニューを表示します。実行時には、コンテキストメニューがテキストボックスコントロールの横に次の図のように表示されます。
関連トピック