Array
(
)

Formatação de Valor

Hal9000
   - 12 mai 2008

Estou usando o controle MaskedEditExtender para formatar alguns campos da minha aplicação só que estou tendo dificuldade para configurar a entrada de valor ´moeda´ da direita para esquerda. mantendo as duas ultimas posições como decimais. Para quem conhece estou tentando fazer o mesmo tipo de entrada de valor que o Banco do Brasil usa.
Alguém sabe como fazer isso com o Extender ou tem algum JavaScript que faça isso? Ou até qualquer outra solução que eu não tenha tentado ?!?

:?:

Chanteelee
   - 12 mai 2008

Seguinte, pra usar a mascara tu faz assim:
Um exemplo q eu fiz dia desses:

<asp:TextBox ID=´VL_INITIAL_p´ runat=´server´></asp:TextBox>

Essa é a input.
E agora vc coloca o MaskedEditExtender em algum lugar da pagina:
<cc1:MaskedEditExtender ID=´Mask_Initial´ runat=´server´ TargetControlID=´VL_INITIAL_p´ Mask=´9,999,999.99´ MaskType=´Number´ InputDirection=´RightToLeft´>
</cc1:MaskedEditExtender>

Entendendo o componente aê:

TargetControlID indica qual INPUT esse extender vai controlar
Mask vc indica como é a mascara... No caso ele ta regulado pra exibir 2 casas decimais ( por causa do . )
MaskType vc indica qual tipo de mascara. Ele funciona pra Data e outras coisas tb...
InputDirection é a direção =D

Mais informações sobre esse e outros componentes do Ajax:
http://www.asp.net/AJAX/AjaxControlToolkit/Samples/MaskedEdit/MaskedEdit.aspx

;)

Hal9000
   - 13 mai 2008

ohh Chanteelee!

Fiz como você falou, olha só:

<asp:TextBox ID=´txtValMoeda´ runat=´server´></asp:TextBox>
<cc1:MaskedEditExtender ID=´MaskedEditExtender1´ runat=´server´
InputDirection=´RightToLeft´ Mask=´999999999,99´
TargetControlID=´txtValMoeda´ AutoComplete=´False´ ClearMaskOnLostFocus=´False´
CultureName=´pt-BR´ MaskType=´Number´ PromptCharacter=´ ´>
</cc1:MaskedEditExtender>

Mas as mascara só funciona assim: ´999999999,99´. se eu colocar ´9.999.999,99´ ou ´9,999,999.99´ A digitação só funciona pela esquerda
Outro problema que percebi quando chego no meu textbox pelo Tab a Mascara fica toda focada e ai digitação só pela Esquerda tb.

Se cliclo no textbox para apagar o foco a digitação vai bem (desde que a mascara seja ´9999999,99´ . Mas Se preciso pagar um valor com back space (por exemplo) ele deveria apagar o meu ultimo caracter da direta para esquerda certo? É mas não faz isso ele apaga o primeiro da esquerda para direita. Enfim... Pau total.

Será que tem algo mais que eu tenha que configurar? Habilitei até o Globalization no Script manager e Nada.

Alguem consegui fazer isso? Com Extender ou com Java Script? Eu to atras de um código javaScript que faça isso mas não achei nada ainda!

:(

Ricardo Silva
   - 13 mai 2008

Se vc quiser usar javaScript é soh fazer a duas funçoes:

#Código

// Formata Float centavos com ´,´ milhar com ´.´
function Limpar(valor, validos) {// retira caracteres invalidos da string
            var result = "";
            var aux;
            for (var i=0; i < valor.length; i++) {
                aux = validos.indexOf(valor.substring(i, i+1));
                if (aux>=0) {
                    result += aux;
                }
            }
            return result;
        }

//Formata número tipo moeda usando o evento onKeyDown
function Formata(campo,tammax,teclapres,decimal) {
            var tecla = teclapres.keyCode;
            vr = Limpar(campo.value,"0123456789");
            tam = vr.length;
            dec=decimal

            if (tam < tammax && tecla != 8){
                tam = vr.length + 1 ; 
            }
            if (tecla == 8 ){
                tam = tam - 1 ;
            }
            if ( tecla == 8 || tecla >= 48 && tecla <= 57 || tecla >= 96 && tecla <= 105 ){
                if ( tam <= dec ){
                    campo.value = vr ;
                }
                if ( (tam > dec) && (tam <= 5) ){
                    campo.value = vr.substr( 0, tam - 2 ) + "," + vr.substr( tam - dec, tam ) ;
                }
                if ( (tam >= 6) && (tam <= 8) ){
                    campo.value = vr.substr( 0, tam - 5 ) + "." + vr.substr( tam - 5, 3 ) + "," + vr.substr( tam - dec, tam ) ; 
                }
                if ( (tam >= 9) && (tam <= 11) ){
                    campo.value = vr.substr( 0, tam - 8 ) + "." + vr.substr( tam - 8, 3 ) + "." + vr.substr( tam - 5, 3 ) + "," + vr.substr( tam - dec, tam ) ;
                }
                if ( (tam >= 12) && (tam <= 14) ){
                    campo.value = vr.substr( 0, tam - 11 ) + "." + vr.substr( tam - 11, 3 ) + "." + vr.substr( tam - 8, 3 ) + "." + vr.substr( tam - 5, 3 ) + "," + vr.substr( tam - dec, tam ) ;
                }
                if ( (tam >= 15) && (tam <= 17) ){
                    campo.value = vr.substr( 0, tam - 14 ) + "." + vr.substr( tam - 14, 3 ) + "." + vr.substr( tam - 11, 3 ) + "." + vr.substr( tam - 8, 3 ) + "." + vr.substr( tam - 5, 3 ) + "," + vr.substr( tam - 2, tam ) ;
                }
            }
        }

pa chamar esta função é simples C#:
#Código
 txtValor.Attribute.Add("onKeyDown", "this, 10, this.event, 2");


Chanteelee
   - 14 mai 2008

Rapaz...
Tenta direitinho, por que a parada funciona sim...

Tenta mudar as propriedades até encontrar o q tu quer