VCL함수에 보면 특정 문자열을 다른 문자열로 변환하는 함수가 있습니다.
AnsiReplaceStr() 함수를 이용하면 특별한 구현 없이 바로 콤마(,)를 제거 할 수 있습니다.
예)
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
AnsiString TempStr = AnsiReplaceStr(Edit1->Text, ",", ""); //콤마(,)를 제거하는 부분
Edit1->Text = FormatFloat("###,###0", StrToFloatDef(TempStr, 0)); //문자열을 실수로 변환하되 변환 불가시 0로 만듬
Edit1->SelStart = Edit1->Text.Length() + 1;
}
단, AnsiReplaceStr() 함수를 사용 할려면 상단에 #include <StrUtils.hpp>를 하여 해당 헤더파일을 포함해줘야 합니다.
하지만,
숫자나 콤마가 아닌 문자를 입력시 바로 0으로 바뀌는 결과가 나오기 때문에
이 방법 보다는 저음부터 숫자만 입력되게 하는 것이 바람직하다고 봅니다.
다음과 같이 에디트에 숫자만 입력되게 하는 방법을 사용해 보십시오
예)
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
LONG const dwStyle = GetWindowLong(Edit1->Handle, GWL_STYLE);
SetWindowLong(Edit1->Handle, GWL_STYLE, dwStyle | ES_NUMBER);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
Edit1->Text = FormatFloat("###,###0", StrToFloatDef(Edit1->Text, 0));
Edit1->SelStart = Edit1->Text.Length() + 1;
}
//---------------------------------------------------------------------------
궁금이 님이 쓰신 글 :
: Edit에 값을 입력하면 자릿수에 맞게 콤마를 넣는 작업을 할려고 합니다.
: MaskEdit는 처음부터 콤마가 보이기 때문에 사용하기 난처해서요
: 막상 Edit에 콤마를 넣을려고 하니 무지 어렵네요
:
: 혹시 비슷한 작업을 하셧거나 좋은 의견 있으시면 아낌없는 조언 부탁드립니다.
: 부디 여러 고수분들의 많은 관심 부탁드립니다.
:
: 그럼 수고하세요^^*
|