AS3 désactiver modifiable / sélectionnable pour textInput à l'intérieur d'un Datagrid
-
26-10-2019 - |
Question
Je tente actuellement de désactiver le sélectionnable / modifiable / ou modifier le textInput à dynamique pour obtenir mon résultat souhaité.
J'ai un DataGrid personnalisé avec menus déroulants et les zones de saisie de texte. Cependant, s'il n'y a pas de données dans mon modèle colonne #, je ne veux pas permettre une entrée dans la cellule PrixAchat correspondante.
col1 = new DataGridColumn("Model");
col1.headerText = "Model #";
c2.consumables_dg.addColumn(col1);
col1.width = 60;
col1.editable = false;
col1.sortable = false;
col1.cellRenderer = AlternatingRowColors_editNum_PurchasePrice;
col1 = new DataGridColumn("PurchasePrice");
col1.headerText = "Purchase Price";
c2.consumables_dg.addColumn(col1);
col1.width = 60;
col1.editable = false;
col1.sortable = false;
col1.cellRenderer = AlternatingRowColors_editNum_PurchasePrice;
J'ai essayé différents éléments du AlternatingRowColors_editNum_PurchasePrice, mais rien ne semble fonctionner pour l'instant. S'il vous plaît Regardez ce que j'ai essayé dans ma déclaration d'autre de l'if (__ enbaled)
package{
import flash.text.TextFormat;
import flash.text.TextFormatAlign;
import fl.controls.TextInput;
import flash.text.TextFieldType;
import flash.events.Event;
import fl.controls.listClasses.ListData;
import fl.controls.listClasses.ICellRenderer;
public class AlternatingRowColors_editNum_PurchasePrice extends TextInput implements ICellRenderer
{
protected var _data:Object;
protected var _listData:ListData;
protected var _selected:Boolean;
private var __enabled:Boolean = false;
public static var _stage;
public static var _alignment;
private var tf:TextFormat;
public function AlternatingRowColors_editNum_PurchasePrice()
{
tf = new TextFormat();
if(__enabled){
if(_alignment == 2){
tf.align = TextFormatAlign.RIGHT;
}else if(_alignment == 1){
tf.align = TextFormatAlign.CENTER;
}else{
tf.align = TextFormatAlign.LEFT;
}
restrict = "0-9.";
addEventListener(Event.CHANGE, textChange);
}else{
//this.selectable = false; // did not work
//textField.selectable = false; // did not work
//textField.type = dynamic; // did not work
//textField.type = TextFieldType.DYNAMIC; // did not work
//this.mouseEnabled = false; // did not work
//this.tabEnabled = false; // did not work
//textField.mouseEnabled = false; // did not work
//textField.tabEnabled = false; // did not work
//selectable = false; // did not work
//this.selectable = false; // did not work
//_enabled = false; // did not work
//-----------------------------------------------------------
// *** Corresponding Entry to enable was placed above ***
//-----------------------------------------------------------
}
super();
}
public function textChange(Event):void{
//trace(_data.Discount);
_data.PurchasePrice = text;
}
public function get data():Object
{
return _data;
}
public function set data(value:Object):void
{
_data = value;
text = value.PurchasePrice;
if(value.Model != "") __enabled = true;
if (value.id % 2 == 0) {
setStyle("upSkin", AlternateColor1 );
} else {
setStyle("upSkin", AlternateColor2 );
}
}
public function get listData():ListData
{
return _listData;
}
public function set listData(value:ListData):void
{
_listData = value;
}
public function get selected():Boolean
{
return _selected;
}
public function set selected(value:Boolean):void
{
_selected = value;
}
public function setMouseState(state:String):void
{
}
override protected function drawLayout():void
{
textField.setTextFormat(tf);
super.drawLayout();
}
}
}
Suis-je juste aborder ce dans le mauvais sens? Au lieu d'essayer d'arrêter la souris, onglet ou convertir le champ de texte dynamique, dois-je tentais quelque chose d'autre pour obtenir le résultat désiré?
Merci, jc
La solution
La meilleure approche est de changer le type de TextField
lui-même, puis changer de propriété selectable
:
//disable input
tf.selectable = false;
tf.type = TextFieldType.DYNAMIC;
//enable input
tf.selectable = true;
tf.type = TextFieldType.INPUT;
Aussi ne pas oublier de définir les propriétés de mouseEnabled
& tabEnabled
selon les besoins / nécessaires à vos champs.
Autres conseils
Assurez-vous d'importer le TextFieldType en haut de votre classe / page / image comme:
import flash.text.TextFieldType;