라벨이 csharp인 게시물 표시

WPF RichTextBox 와 Document의 바인딩

MVVM 패턴을 이용해서 View의 TextBox 등에 바인딩은 간단하게 <TextBox Text="{Binding mystring}"/> 이렇게 하면 된다. RichTextBox 도 마찬가지 일것 같지만, 해보면 안된다. 먼저 RichTextBox가 Content를 표현하는 구조를 알아야 되는데, 그건, 다음에 정리하고, 바인딩 하는 방법은 아래와 같다. 먼저 ViewModel 을  DependencyObject 를 상속고 DependencyProperty 를 정의해준다. public class MyViewModel : DependencyObject { public FlowDocument Document { get { return (FlowDocument)GetValue(DocumentProperty); } set { SetValue(DocumentProperty, value); } } public static readonly DependencyProperty DocumentProperty = DependencyProperty.Register("Document", typeof(FlowDocument), typeof(MyViewModel), new PropertyMetadata(OnDocumentChanged)); public void OnDocumentChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { } } 그 다음 View 의 code-behind 의 생성자에 InitializeComponent(); Binding b = new Binding("Document"); b.Source = richTextBox; b.Mode = BindingMode.OneWay; BindingOperations.SetB...

C# 정규식

.Net에서는 정규식을 위해 Regex 라는 클래스를 제공한다. Regex 클래스는 System.Text.RegularExpressions 네임스페이스에 있다. 우선 전화번호는 Regex regex = new Regex(@"\d{3}-\d{3,4}-\d{4}"); \d 는 [0-9] 와 같은 표현식이며 실제로 전화번호는 전부 0으로 시작하기때문에 0 이라고 써도된다. Regex regex = new Regex(@"0\d{2}-\d{3,4}-\d{4}"); 두번째 자리는 핸드폰의 경우는 모두 1 이므로 아래와 같이 수정할수 있다. Regex regex = new Regex(@"01\d-\d{3,4}-\d{4}"); {n} 은 반복되는 횟수이다. \d 는 숫자라는 뜻이다. 첫번째 \d{3} 은 숫자가 3개 반복된다는 뜻이다. 대쉬 "-" 는 그대로 인식된다. \d{3,4} 는 숫자가 3자리에서 4자리라는 표현이다. 여기까지면 전화번호 표현은 끝이다. 첫번째 표현은 아래와 같이 다르게 표현할수 있다. Regex regex = new Regex(@"[0-9]{3}-[0-9]{3,4}-[0-9]{4}"); [0-9] 는 0에서 9 사이의 문자가 올수 있다는 뜻이다. [0-9]{3} 는 0에서 9사이의 문자가 3번 반복된다는 뜻이다. 그럼, 아래 예제를 실행해보자. static void Main(string[] args) { Regex regex = new Regex(@"\d{3}\-\d{3,4}\-\d{4}$"); string[] target = { "011-333-1234", ...

C#, BinaryReader , Java , ReadDouble

자바에서 ReadDouble() 로 잘 읽어서 사용하였는데 C#에서 ReadDouble() 로 하니 엉뚱한 값이 나온다. window 머신이었는데, hex 값을 보니 little endian 이었다. java로 돌렸을땐 잘돌아가서, 아무 생각없이 하다 삽질만 했다. 어쨌든 해결 방법은 간단하다. http://msdn.microsoft.com/en-us/library/bb384066.aspx 바이트 배열로 읽어서 뒤집어 준다음 Double로 바꿔주면 된다. BitConverter.ToDouble(bytes);