본문 바로가기

프로그래밍

(84)
[WPF] ScrollViewer가 스크롤 할 때 보여지는 부분만 업데이트 한 화면에 Usercontrol을 화면을 넘치게 그리는 경우가 종종있다. 그럴 경우 ScrollViewer 컨트롤을 사용한다. 너무 많은 Usercontrol을 업데이트(먼가 힘든 작업)를 할 때 리소스를 많이 잡아 먹는다. 그래서 휴대폰 앱에서와 같이 스크롤된 부분만 그리는 작업이 필요하다. 화면에 보여지는 Usercontrol의 이벤트를 받아서 처리하면 먼가 깔끔하게 될거 같은데 현재로선 방법을 찾기힘들다. 그래서 대안으로 스크롤된 위치와 Usercontrol의 위치를 비교해서 처리하는 방식으로 구현을 했다. MainWindow.xaml http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft..
구글 클라우드 VM Ubuntu 설치 node.js Express 설치 구글 클라우드 VM Ubuntu 설치 node.js Express 설치 1. 구글 클라우드 VM에 Ubuntu 설치 구글 클라우드 사이트에 접속해서 Compute Engine > VM 인스턴스를 선택합니다. 상단에 인스턴스 만들기를 누릅니다. 스크롤을 내려보면 중간쯤에 부팅디스크 항목이 있습니다. 변경 버튼을 누르면 원하는 OS를 설치할 수 있는 화면이 나타납니다. 이 화면에서 운영체제(Ubuntu)와 버전(20.04 LTS)을 선택하면 됩니다. 선택하고 하단에 선택 버튼을 누르면 됩니다. 그리고 방화벽 항목에 HTTP, HTTPS 트래픽 허용을 체크합니다. 그리고 만들기 버튼을 누르면 수초 후에 VM 인스턴스가 생성됩니다. 2. VM 고정 IP 설정하기 VM이 생성되면서 할당되는 외부 IP는 고정 IP..
[C#] Winform / WPF Textbox에 한글 입력 방지(영어, 숫자만 입력하기) Winform Textbox 속성에 ImeMode를 Disable로 적용 WPF 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 private void Textbox_PreviewTextInput(object sender, TextCompositionEventArgs e) { var regex = new Regex(@"[^a-zA-Z0-9\s]"); if (regex.IsMatch(e.Text)) { e.Handled = true; } } private void Textbox_PreviewKeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.Space || e.Key == Key.ImeProcessed) { e.Handled = tr..
[WPF] 자석 기능(Sticky) 윈도우 12345678910111213141516171819202122232425262728293031323334353637383940414243444546using System;using System.Windows;using System.Windows.Forms;using System.Windows.Input; namespace NPMon_WPF.Widget{ /// /// WidgetStatus.xaml에 대한 상호 작용 논리 /// public partial class WidgetStatus : Window { public WidgetStatus() { InitializeComponent(); this.MouseLeftButtonUp += OnMouseLeftButtonUp; } private void W..
ComboBox를 클릭하면 Telerik WPF Chart와 모든 UI 컨트롤이 느려질 경우 ComboBox를 클릭하면 Telerik WPF Chart와 모든 UI 컨트롤이 느려는 경우가 있다. App.xaml.cs 파일에 아래 코드 한줄만 넣으면 해결된다. 1 2 3 4 5 6 7 8 9 10 using Telerik.Windows.Automation.Peers; public partial class App : Application { public App() { AutomationManager.AutomationMode = AutomationMode.Disabled; this.InitializeComponent(); } } Colored by Color Scripter cs 관련 이슈 : RadCartesianChart Performance goes down when clicking combo..
C# WPF DataGrid에 UserControl을 넣고 UserControl에서 원하는 동작을 하기 XAML 1 2 3 4 5 6 7 8 9 10 11 Colored by Color Scripter cs Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 using System.Windows; using System.Windows.Controls; namespace TestProject.Controls { public partial class UserControl1: UserControl { public UserControl1() { InitializeComponent(); this.DataContextChanged += UserControl1_DataContextChanged; } private void UserControl1_DataContext..
C# Find vs FirstOrDefault vs Where + FirstOrDefault vs for loop 대용량 자료구조를 검색할 일이 생기다보면 종종사용하게되는 함수가 Find, FirstOrDefault 인데.. 이것이들 내부적으로는 다르게 돌아가서 속도 차이가 난다고한다. 실제로 얼마나 차이가 나는지 간단한 코드로 테스트해보았다. 테스트 환경 CPU : Intel i5-9600K 3.7GHz 운영체제 : 윈도우 10 64비트 컴파일러 : Visual Studio 2019 Community 검색 개수 : 30,000,000 (3천만개) 검색 조건 : 제일 마지막 데이터 검색 첫번째 케이스 : Find 10회 결과(ms) RunTime1 : 438 ms RunTime1 : 438 ms RunTime1 : 424 ms RunTime1 : 434 ms RunTime1 : 427 ms RunTime1 : 431..
WPF UI 사용법(너무 느린 WPF 프로그램 개선방안) WPF로 프로그래밍하다보면 너무 느려서(저사양 PC에서 주로 발견) 못쓰겠다는 사태가 나타났습니다. 이리저리 찾아보다가 필요한 사항을 정리해 보았습니다. 1. UI 스레드 다른 스레드에서 UI 요소(Textbox, Lable 등)의 정보를 갱신하려면 아래와 같은 오류가 발생합니다. 다른 스레드가 이 개체를 소유하고 있어 호출한 스레드가 해당 개체에 액세스할 수 없습니다. 이 상황에서 많이 사용하는 방식이 Dispatcher.Invoke 입니다. 간단한게 사용하기 쉬워서 자주 쓰다보면 프로그램이 느려지거나 어느 순간 먹통이 되는 사태가 발생합니다. MSDN에서는 이렇게 설명합니다. Dispatcher.Invoke 는 동기로 실행되기 때문에 요청을 처리할 때까지 다른 동작이 차단됩니다. 대신 Dispatch..