2009-06-06 1 views
0

私は選択可能にする(.selectable = true)AS3のラベルを持っており、カスタムメニュー項目と共にALONGをクリックするとクリップボードメニューが表示されるようにします。もつともその中で私はクリップボードのアイテムと私のカスタムアイテムを持っているメニューを取得し、ラベルを右クリックしたときに...、 -カスタムコンテキストメニューをAS3で有効にする

var label:Label = new Label(); 
label.text = "test"; 
label.selectable = false; 

var contextMenu = new ContextMenu(); 
contextMenu.clipboardMenu = true; 
contextMenu.clipboardItems.copy = true; 
contextMenu.clipboardItems.selectAll = true; 
contextMenu.addItem(new ContextMenuItem("Test Item")); 
contextMenu.addItem(new ContextMenuItem("Test Item 2")); 

label.contextMenu = contextMenu; 

thing.addChild(label); 

このALMOST作品:

私はこれを行う場合.selectable = falseのため、ラベルIS NOT SELECTABLEのテキストが表示されます。これは、クリップボードのメニュー項目を無用にします。

label.selectable = false; 

へ:私はライン変更した場合は

label.selectable = true; 

ラベルが選択可能であるが - しかしONLYクリップボードメニュー項目が存在しています。

ラベルを選択可能にする方法と、カスタムアイテム+標準クリップボードアイテムを含むメニューを使用する方法はありますか?

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

BTW - これは、3.2 SDKを使用したAIRアプリケーションでのものです。

答えて

1

のUITextFieldを使用してみてくださいは、ラベルのinsted:

var label:UITextField = new UITextField(); 
label.text = "test"; 
label.selectable = true; 

var contextMenu:ContextMenu = new ContextMenu(); 
contextMenu.clipboardMenu = true; 
contextMenu.clipboardItems.copy = true; 
contextMenu.clipboardItems.selectAll = true; 
contextMenu.customItems = [new ContextMenuItem("Test Item"), new ContextMenuItem("Test Item 2")]; 

label.contextMenu = contextMenu; 

addChild(label); 

をあなたがするNativeMenuののContextMenu isteadを使用することができますがまた、あなたが内部のUITextFieldに直接コンテキストメニューを適用するためにラベルを拡張することができます(このソリューションは、空気のみで動作し、 AIRとFlash Playerの両方で動作します):

package test 
{ 
import mx.controls.Label; 
import flash.display.NativeMenu; 
import mx.core.UITextField; 
import mx.core.mx_internal; 

use namespace mx_internal; 
public class LabelWithContextMenu extends Label 
{ 
    public function LabelWithContextMenu() 
    { 
     super(); 
    } 

    override public function get contextMenu():NativeMenu 
    { 
     if (textField is UITextField) 
      return UITextField(textField).contextMenu; 
     else 
      return super.contextMenu; 
    } 

    override public function set contextMenu(cm:NativeMenu):void 
    { 
     if (textField == null) 
      createTextField(-1); 
     if (textField is UITextField) 
      UITextField(textField).contextMenu = cm; 
     else 
      super.contextMenu = cm; 
    } 

} 
} 
+0

非常に良い例 - 素晴らしい解決策です。どうもありがとうございました。 +1チェックボックスをオンにします。とても有難い。 – Gabriel

関連する問題