DockableContent의 SizeChanged Event에 핸들러를 붙여보면 동작하지 않는다. 결국 아발론닥 소스를 수정할 수 밖에 없었다. dockmanger의 크기와 dockablecontent의 영역의 위치와 크기를 알기 위해서는 소스의 prviate 부분을 public 으로 바꾸던지 readonly 속성을 추가해줘야한다.
RichTextBox의 Ctrl + I 같은 기본 단축키는 그냥 덮어씌우니 동작이 안되었다. 구글신에게 도움을 요청해서 겨우 찾았다. 아래 코드로 해제시킨후 쓰고자하는 command를 바인딩 한다. =========================아래 ============================== KeyBinding keyBinding = new KeyBinding ( ApplicationCommands .NotACommand, Key .L, ModifierKeys .Control); richTextBoxMain.InputBindings.Add(keyBinding); keyBinding = new KeyBinding ( ApplicationCommands .NotACommand, Key .I, ...
c#에서 다른 프로세서를 호출하고 리턴값을 받기위한 소스이다. ==일단 c++===================================== #include "stdafx.h" #include <iostream> int _tmain( int argc, _TCHAR* argv[]) { return -12; } ===================================== == c#에서는 ================================= using System; using System.Diagnostics; using System.Runtime.InteropServices; namespace ConsoleCreateProcess { public struct PROCESS_INFORMATION { public IntPtr hProcess; public IntPtr hThread; public uint dwProcessId; public uint dwThreadId; } public struct STARTUPINFO ...
훈스닷넷에 답글달고 정리 차원에서 남겨둔다. C#에서는 C에서 처럼 포인터를 사용할수가 있다. 빌드옵션에서 안전하지 않은 코드 check 해주고 다음과 같은 방법으로 한다. static void Main(string[] args) { foo(); } unsafe static void foo() { Int64 aa = 123456789; Int64 bb = 123222; IntPtr pt = new IntPtr(&aa); IntPtr pt2 = new IntPtr(&bb); Console.WriteLine(pt.ToString("x")); Console.WriteLine(pt2.ToString("x")); Int32 a = 1234231; Int32 b = 154324; IntPtr pt3 = new IntPtr(...
문자열에서 중복되는 값을 찾고 싶을때 LINQ 를 이용해서 아래와 같이 하면 된다. ( LINQ 오늘 처음 써봐서 예제가 허접합니다) string t = "a,b,c,d,e,e,e,f,g"; var r = from n in t group n by n into g where g.Count() > 1 select g; foreach (var a in r) { Console.WriteLine(a.Key ); } , 도 문자열로 인식되서 split 해줬다. string t = "a,b,c,d,e,e,e,f,g"; var r = from n in t.Split(',') ...
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...
.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", ...
WFP를 이용해서 어플리케이션을 개발중이다. 예외 메시지는 "다른 스레드가 이 개체를 소유하고 있어 호출한 스레드가 해당 개체에 액세스할 수 없습니다." UI를 다른 쓰레드에서 update 할려고 하면 UI를 담당하는 쓰레드가 해당 컨트럴(객체)를 사용하고 있어 접근 할 수가 없다. 이렇게 다른 쓰레드가 사용하는 객체를 다른 쓰레드에서 접근할때 생기는 문제를 Cross-thread라고 한다. 해결방법은 새로만든 쓰레드에서 UI를 update 할때 UI쓰레드에게 할일을 위임해주면 된다. Winform에서는 Invoke 메소드를 이용하고 WPF에서는 Dispatcher.Invoke를 이용하면 된다. 예제는 구글링으로 ~ 구글링은 c# wpf cross thread 등으로 검색하면된다. http://www.google.co.kr/search?gcx=w&sourceid=chrome&ie=UTF-8&q=c%23+cross+thread+wpf+dispatch
자바에서 ReadDouble() 로 잘 읽어서 사용하였는데 C#에서 ReadDouble() 로 하니 엉뚱한 값이 나온다. window 머신이었는데, hex 값을 보니 little endian 이었다. java로 돌렸을땐 잘돌아가서, 아무 생각없이 하다 삽질만 했다. 어쨌든 해결 방법은 간단하다. http://msdn.microsoft.com/en-us/library/bb384066.aspx 바이트 배열로 읽어서 뒤집어 준다음 Double로 바꿔주면 된다. BitConverter.ToDouble(bytes);