본문 바로가기

분류 전체보기

(96)
WPF TextBox Caret 의 좌표 가져오기 WPF 의 TextBox 를 이용해서 현재 입력하고 있는 문자열에 자동완성 비스무리한 기능을 넣으려고 하다 보니 현재 Caret (현재 커서가 간 위치) 위치에 삽입할 수 있는 문자열을 표시할 팝업 창을 보여줘야 했다. 그러다 보니 그 팝업 창을 보여주기 위해서 Caret 의 좌표가 필요했다. public Point GetCaretPos(TextBox textBox) { int tRowIdx = textBox.GetLineIndexFromCharacterIndex(textBox.CaretIndex); int tLineFir = textBox.GetCharacterIndexFromLineIndex(tRowIdx); int tColIdx = textBox.CaretIndex - tLineFir; Format..
WPF 에서 Resize 시 멈춤 현상 얼마 전부터 몇몇 Client 에서 프로그램을 Resize 할 때 마다 멈추는 현상이 발생하였다.프로젝트 오픈이 얼마 남지 않은지라 비상전시 체계로 돌입하여 원인을 찾기 시작했다. 특정 Client 에서 프로그램의 내부 / 외부를 가지 않고 모든 Resize 시 CPU 점유율이 50%까지 치솟고 몇 십 초에서 몇 분까지 멈추기 때문에 굉장히 심각한 문제였다. 하지만 WPF 로 만들었기 때문에 Resize 에 대해서 특별히 다른 처리를 해준 것은 없었고 그래서 이벤트나 쓰레드 는 물론이고 안에 들어가 있는 거의 모든 로직에 대해서 검토를 하였지만 별 다른 이상을 찾지를 못했다. 테스트를 하다 보니 MeasureOverride 와 ArrangeOverride 에서 거의 대부분의 시간을 소요하는 것을 알게 되..
분할 조회 쿼리 아시는 분이 유용한 쿼리라고 하나를 알려주셨다. 조회시 건별로 짤라서 가져올 수 있는데...굉장히 유용하게 사용할 수 있을 듯 싶다.SELECT * FROM (SELECT ROWNUM RNUM, A.* FROM ( SELECT * FROM TESTTBL ORDER BY SEQ) A WHERE ROWNUM = 25 /*시작 ROWNUM*/
NetAdvantage XamDockManager 의 Menu 비활성화 infragistics NetAdventage 의 XamDockManager 를 사용하다보니 Docking Control 이라면 당연히 제공되는 기능이지만... 사용자가 해당 Pane 의 Docking 속성을 변경 할 수 있는 팝업 메뉴를 제공하고 있었다. 하지만 이런 메뉴가 필요치 않아서 제거하려고 약간의 문제점이 있었다.단순히 메뉴를 비활성화 하는 프로퍼티가 없는 듯 했다. 확실히는 잘 모르겠다. Template 을 재정의해서 어찌어찌하면 될 것 같기도 하고...Pane 헤더 부분을 구성하고 있는 별도의 컨트롤이 있어서 그녀석을 어찌어찌해주면 될 것도 같지만... 그냥 눈에 보이는 컨트롤 부분에서 해결하려고 하니저 메뉴에 나오는 기능에 대한 활성/비활성에 대한 옵션은 제공하고 있었고 저 메뉴에 포함된..
ComboBox 의 SelectedValue 와 SelectedItem 의 성능적 차이 WPF ComboBox 에 Item 을 선택할 때 SelectedIndex SelectedValue SelectedItem 이렇게 세가지 방법이 있다. 이번 주제는 SelelctedValue 와 SelectedItem 의 차이에 대해서 이야기 해보겠다. SelelctedValue 는 ComboBox 에 ItemsSource 를 Binding 시 그 바인딩 한 객체의 특정한 프로퍼티를 지정하여 검색하여 할 때 그 지정한 프로퍼티의 값을 찾아서 해당 아이템을 선택한다. SelectedItem 은 Binding Item 의 객체를 넣어주면 그 객체로 그냥 선택이 된다. 문제는 2개의 성능에서 차이가 있다는 것이다.일반적으로 아이템의 개수가 작거나 컴퓨터의 성능이 어느 정도 이상이면 이런 문제는 발생하지 않지만..
Spread 에서 이미지 Attach 시 Memory Leak Spread 의 Annotation 기능을 제공하는데 그 중에 이미지를 Attach 할 수 있는 기능이 있다. [FarPoint.Win.Resouce Portal] 이미지를 Attach 하면 그 이미지에 대한 위치 / 크기 / 회전 에 대한 다양한 기능을 지원하는데..문제는 여기서 발생한다. 아래는 Spread 에서 기본 제공하는 Resouce Portal 에서 이미지를 Attach 했을 때 작업관리자에 표시된 정보이다. 사용 중인 메모리는 135메가 이다. 이제 그 이미지를 선택해서 아래와 같이 좌우로 한 10번 쯤 이동시켰다. 그리고 작업관리자에 메모리 사용량을 보면 약 70메가 정도가 급 상승한 것을 볼 수 있다. 별 다른 작업없이 그냥 그냥 올라간 이미지를 잡고 움직이는 것 만으로 사용하는 메모리..
Prism - 완전 단순한 Sample Source winform 을 하다가 갑자기 wpf 를 하라고 해서 부랴부랴 한 5일 책을 읽고 엉겁결에 wpf 에 입문해서 닥치는 대로 우선 만들었는데...그러다 보니...완전 개념 상실. MVVM 이고 Prism 이고 뭐고 다 저 뒤편으로 팽개쳐놓고 있다가이제 서야 Prism 을 조금씩 공부해보려 하니...나이도 먹고..머리가 썩은지라...더군다나 혼자 하려니...너무 어려웠다. 우선 처음으로 간단하게 빈 메인 화면 띠우는 것 부터...하려고 하였으나...Prism 샘플로 있는 소스는 너무 복잡해서...이것저것 다 빼고 어찌어찌 해서 만든 완전 단순한 "Hello World" 수준의 그냥 화면만 뜨는 샘플 소스를 만들었다. 우선 Bootstrapper 를 상속받아 기본적으로 Application 실행에 필요한 M..
확장 메소드(Extension Methods) 확장 메소드는 기존 Type 에 메소드를 추가할 수 있게 해준다. 예를 들어 TextBox 에 AppendText 라는 메소드가 있습니다.TextBox 에 문자열을 추가하는 기능을 합니다. 하지만 자동으로 개행이 되는 AppendText 가 필요하다고 하면 (그냥 NewLine 을 붙여도 되겠지만....)TextBox 를 상속받아서 AppendText 메소드를 추가해야 한다. 1void AppendText(string textData, bool IsNewLine)cs 그렇게 되면 상속받아서 만든 TextBox 의 인스턴스에서만 사용이 가능하며예시처럼 컨트롤이라면 디자인에 올라간 컨트롤도 교체를 해야한다. 하지만 확장 메소드를 이용하면 쉽게 해결이 가능하다. 1234567public static class..