WPF] Numeric TextBox
오늘 ( 2015-10-02 ) CodeProject 갔더니.
http://www.codeproject.com/Tips/1035207/Number-Only-Behaviour-for-WPF
내가 만든 프로그램 버그 : Ctrl + C눌렀는데 복사가 안되고 붙여넣기가 된다?
>> 집에서 수정해놓았던 소스는 C , V 코드가 이미 수정되어 있네...
>> 숫자 이외에 붙여넣기 할때 붙여지는 현상
SetValue 에서 valueString의 데이타 타입확인 후 변환 후 콤마 찍고 바인딩 하도록 수정함!
#########################################################################
WPF Numeric 컨트롤이 없을줄이야 ㅡ.,ㅡ^
구글링 해도 없네..?
거기다가 ... ErrorProvidor가 없어 ㅡㅡ;?
예제들이 모두 바이딩을 해야 되다뉘???
쨔안!~~~ 만들었다.
컨트롤을 만들었다기 보다.. Textbox에 Template 을 이용해서 만들었다.
위 예로는 5, 2 <-- Numeric( 5, 2 ) 로 만들어진 컬럼을 대상으로 컨트롤 입력/출력을 함!!
입력할때마다 콤마 콤마가 자동으로 위치잡고 소수점 찍으면 뒤로는 한자리씩 교체되고...
유효성 체크도 한방에 주르륵... 처리 해주고..
이게 컨트롤로 만든게 아니라서 ... 뭐... 필요할때쯤 되면 만들어 보든가~
### 디버깅..
ReadOnly 스타일을 넣었고,
정수만 처리할때 - 자리를 처리 하지 않도록 뺌.
Control + c, v, x 처리.
디버깅을 하다가 예상하지 못한 일을 격었다.
SetValue( NumberText1, 99999999.99999999999 ) 로 지정하였을때!!
double 인데 문자열로 변환 했더니 반올림이 되어서 나온다?
음... 일단 컨트롤에 자리수가 8, 2 이기 때문에 소수 2자리 뒤에 문자들은 반올림 없이 잘라내려고
문자열로 만드는 과정에서 당황했었다.
찾은 방법은 r !! n, d, x등등 봤는데... r... 이건 반올림 없이 문자열로 만들어준다.
뒤에 자르고 콤마를 넣어주며 마무리!!!
### 수정본 ### 소수점처리가 잘못되어있었넹... , 파라미터 부분에서 포맷도 제거 함.
private string GetNumberFormat(object dm, NumericTextBoxInfo info)
{
string number = "" + dm;
if (info.Scale > 0)
{
// 소수점뒷자리를 잘라냄.
if (number.IndexOf('.') >= 0)
{
string[] nums = number.Split('.');
number = nums[0] + ".";
if (nums[1].Length > info.Scale)
{
number += nums[1].Substring(0, info.Scale);
}
else
{
number += nums[1].PadRight(info.Scale, '0');
}
}
else
{
number = number + "." + "".PadRight(info.Scale, '0');
}
}
else
{
if (number.IndexOf('.') >= 0)
{
number = number.Remove(number.IndexOf('.'));
}
}
/*뒤에서부터 콤마 찍고 온다..*/
int start = number.Length;
if (number.IndexOf('.') > 0) {
start = number.IndexOf('.');
}
for (int end = start - 3; end >= 0; end -= 3 )
{
number = number.Insert(end, ",");
}
return number.TrimStart(',');
}
하핫.. 재미있당.
소스 hidden~ ( 갱신 20150915 )
'# 4) .Net ( Vs 2010 ) > 차세대 WPF, WCF' 카테고리의 다른 글
WCF 관련 샘플 ( 윈도우 인증, 사용자정의 인증 ) (0) | 2021.04.30 |
---|---|
Progress ] 로딩표시 창! (0) | 2015.10.15 |