WPF

WPF에서 스크린 캡쳐WPF에서 스크린 캡쳐는 기본적으로 위의 윈폼에서의 스크린 캡쳐와 같다. 즉, 화면크기 만큼의 Bitmap 객체를 할당하고, 여기에 Graphics의 CopyFromScreen() 메서드를 사용하여 화면을 복사해서 넣으면 된다. 단 화면 크기를 구하는 System.Windows.Forms.Screen 을 WPF에서 사용하지 않고 대신 System.Windows.SystemParameters.PrimaryScreenWidth와 SystemParameters.PrimaryScreenHeight 를 사용하게 된다.코드using System.Drawing;using System.Drawing.Imaging;using System.Windows;namespace ScreenCopyWpf{ ..
열심히 WPF로 프로그램을 개발했다.. 최종 완성시키고 클라이언트에게도 확인 다 받았는데... 뜬금없이 Python 하나만 실행할 수 있게 해달란다... 뭐 Process 써서 .py 파일만 하나 실행하면되겠지. 라고 맘 편히 생각하고, 놀다가 이제 개발좀 해볼까 하고 개발을 시작했다. 환경설정에 Python 해주고. Command창에서 Python 실행되는거 확인했으니 이제 Process로 실행만 해주면 되겠네 Process cmd = new Process();cmd.StartInfo.FileName = @"python";cmd.StartInfo.Arguments = @"C:\test.py";cmd.Start(); 간단하게 하면 되겠지. 실행 고 에..?? 왜 안되지...... Command창이 떳다가..
C#에서 Excel 실행법1dynamic excelApp = AutomationFactory.CreateObject("Excel.Application");cs위와같은 코드를 이용하면 엑셀이 실행된다.하지만 이전에 작업해주어야 할것이 한가지 있다.Excel.Application을 이용하려면 프로젝트에 Microsoft.Office.Interop.Excel 항목을 참조 추가하여야한다.추가 방법은 Project -> Add Reference -> COM 탭 -> Microsoft Excel Object Library체크 -> OK만약 Microsoft Excel Object Library이 보이지않는다면 엑셀의 설치와 VS의 설치 순서가 달라서 안보이는 것이다.Office 2003 : http://www.mi..
우리가 개발을 하다보면 멀티 스레드환경으로 꼭 개발이 들어가게 된다. 특히나 UI를 만지다 보면 필수... WPF에서는 특히나 Single Thread 환경이기에 UI Thread에 대한 처리가 꼭 필요하다. MVVM으로 처리를 한다면 백그라운드에서 알아서 잘 해주기에 많은 신경은 안써주어도 알아서 바인딩되서 착착 UI에 업데이트되지만? 아무튼. 이러한 상황에서 1초마다 Timer를 발생시키는 System.Timer 요녀석을 통해 매 초 특정 기능을 수행하려고 한다. 허나 System.Timer는 오차가 존재한다는 점. 윈도우 응용프로그램은 하드웨어 클락? 을 이용치 않기에 오차가 무조건 존재하고 나는 그 오차가 +-0.000몇초차이로 존재하며 앞뒤로 있을 것이라 생각했지만 왠걸... 요런식으로 쌓이기만..
WPF 버전으로 WCF예제를 만들어보았다..... 누가 얼마나 써볼지 모르겠지만......... 일단 사용해보시라........ CLIENT에서 SERVICE를 참조하기 위해서는 Release파일을 파일탐색기에서 실행(관리자 권한)해둔 후 서비스 참조를 해야한다. 그 후 IP와 port를 잘 입력하면 이런식으로 잘 나온다..... 사용법은........... 만들다 귀찮아서...대충만들어서............................ 일단 서비스를 먼저 실행하고 클라이언트를 실행한다. 그 후 서비스의 버튼과 클라이언트의 버튼을 누르면 WCF통신을 하여 string값을 전달하고, 전달 된 값을 textbox에 표출하는게 끝! 함수 상태를 보고 함수를 추가로 생성해서 확인해보면 될 것 같다!
이번엔 JSON이다. JSON은 사실 나도 잘 모르는............ 단순 XML같은 자료라고만 알고있다... 그리하여 JSON은 언어가 아니므로 어디서든 사용할 수 있는 만국 공통 자료형태라고 생각하면 좋을 것같다. 근데.. 이런 JSON을 왜 만들었나.. XML도있는데..? 파싱의 속도, 보기편함 등의 이유로 만들어졌다고 한다. XML보다 파싱도 빠르고 보기도 편하다나....... 사실 실제 프로젝트에서 사용해본적은 없기에 아직까지 와닿진않는다.... 그렇다고 사용하는법을 몰라선 안되는 법이니.. 사용하는 법을 알아보자..!! 간단하게 class를 만들고 해당 class를 갖고있는 변수데이터를 JSON으로 만든 후 파일로 저장하는 코드를 확인해보도록 하자. 일단 JSON을 사용하기 위해서는 Nu..
이전에 객체지향에 대해 알아봤다. 그 중 상속에 대해 더 적어볼까 한다. 상속은 클래스 만들지 정말 자주 쓰는 기능.. 간단하게 자동차에 대해 만든다 하더라도 자동차의 클락션 기능은 모든 자동차에 들어가는 기능이고 일부 기능들은 각 제조사에 따라 들어갈수도 안들어갈수도있다. 이러한 부분들을 생각하며 클래스를 구성한다면 중복되는 코드들을 상당히 줄여나갈 수 있다. 그리하여 상속하는 방법중 3가지 virtual, abstract, interface을 알아보도록 하자. 1. Virtual Virtual은 말 그대로 가상이다. 부모클래스에서 선언을 했더라도 자식클래스에서 재정의하여 사용하는 것이 가능하다..! 또한 재정의를 하지 않아도 사용 가능! 즉 재정의가 필수가 아닌것이다.! 하지만 재정의를 하기 위해서는..
이번엔 클래스에 대해 알아보자... C#은 OOP(Object Oriented Programming) 언어이다. C는 PP(Procedural Programing) 언어구요 다르게 말하면 C는 절차지향언어, C#은 객체지향 언어! 이렇게 말하면 또 쉽지... 절차지향은 위에서부터 차례대로 컴파일하므로 변수 선언, 함수 선언등을 언어의 상단에다가 해주어야 한다. 하지만 객체지향은 객체단위로 컴파일을 하므로 굳이 위쪽에 선언을 해주지 않아도 된다. 또한 객체지향은 캡슐화, 다형성, 클래스 상속등의 기능등의 기능을 제공하고, 이러한 기능때문에 객체지향을 많이 쓰게 된다. ( 그래도 C가 전세계에서 가장많이 쓰는언어지만.. 그만큼 빠름 ) 여기서 클래스 상속과 캡슐화, 다형성에 대해서 알아보자. 내가 생각하기에..
이번엔 Partial Class이다. 사실 현재까지는 많이 사용하지 않는 방식.. 하지만 코드가 길어지고 하다보니 써봐야하는생각이 많이 든다. ViewModel에 Binding 되는 Property들, 호출하는 Command, 또한 기본 생성장/소멸자/Dispose등 많아질수록 위치가 헷갈린다.. 대부분 F12키를 이용해서 이동하지만.... 생성자 한번 찾아가려면..고생이다.. 다음 플젝부터는 좀 구분해서 해보는것도 좋은 방법일듯싶다. 그리하여 코드 ㄱㄱ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 Colored by Color Scripter cs UI는 어렵지 않게 꾸미겠다.. 그냥 바인딩되는 TextBlock 한개.... 코드비하인드도 ..
36번째 글... 진행합니다.... 이번엔 너무 간단한 주제... WPF를 개발하다보면 정말 많은 Window가 나온다.. 해당 Window를 제어할 수 있는 방법이다 간단한 API만 사용하면 끝난다. 바로 ㄱㄱ 1 2 3 foreach( Window window in Application.Current.Windows ) { Console.WriteLine(window.Title); } Colored by Color Scripter cs 끝이다...... Application.Current.Windows 변수에는 현재까지 생성된 Window들이 전부다 들어가있다.. 해당 Window의 Name, Window Type등을 통해 MainWindow나 Subwindow등을 찾아서 제어해주면 끝난다. 만약 응용..
오랜만에 남긴다....... 35번째.. xmlserialize... xml은 정말 흔히 쓰이는 input/output 파일이다. 이 파일을 통해 parsing도 하고 넘겨주기도 하고... 그래서인지 xml에 대한 serializer는 굉장히 잘되어있는 편.. 바로 코드 ㄱㄱ 그냥 viewmodel도 필요없이... 걍 코드 비하인드로 진행해보자.....(코드는 들어가있으나..없어도 무관) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 Colored by Color Scripter cs 단순 텍스트 박스 1개에 버튼 2개... 코드비하인드는 1 2 3 4 5 6 7 8 9 10 11..
Drag & Drop이다. Drag&Drop은 언제해도 복잡한거같다.... 이해를 별로 하고싶지가 않아서일까....... 이번에 적는것도 이해는 잘안하고...그냥 거의 실습위주.............. 일단... ListView간의 Drag & Drop으로 데이터를 복사하는 부분을 확인해보자. 일단 XAML! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 Colored by Color Scripter cs 단순 2개의 ListView를 선언해주고 각 ListView에 ViewModel의 데이터를 바인딩. 또한 드..
이번엔 ToString 포맷이다. 개발을 하면서 굉장히 많은 데이터를 확인해보아야 한다. bool이든, int등, float이든, string이든.. 이러한 값들을 Console이나 MessageBox, Label등에 표출하기 위해 string 값으로 변환을 해야하는데.. 이때 사용되는 것이 String의 ToString() 함수! 사용법은 너무 간단하게 그냥 선언된 변수에 ToString만 해주면된다. 1 2 3 int value = 222; Console.WriteLine(value.ToString()); cs 이게 끝... 하지만.. 이거 적자고..블로그에 적을리는 없지.. ToString에는 여러 파라미터가 들어간다. 파라미터에 따라 값을 다르게 표출해주는 것.. 이 파라미터가 굉장히 많다... ..
DataGrid를 사용했으면... Filter도 확인해보고 싶을 것이라 생각된다. DataGrid에서의 필터기능은 단순 RecordFilter 기능을 이용해서 Filter를 넣을수도 있지만.. 해당 컴포넌트를 사용하면 더더욱 보기 좋을 것으로 생각된다. 해당 컴포넌트는 바로 FilterGrid.. Nuget에서 FilterDataGrid를 검색해보자 해당 Nuget 설치!!! 설치가 완료된 모습! 그렇다면 설치한 DataGrid를 선언해보자!! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 Colored by Color Scripter c..
가장 많이 사용되는 Component를 할때가 된거 같다. DataGrid... DataGrid는 테이블형태로 표출하는 Component로써 굉장히 많이 사용된다. 특히 주로 사용되는 부분은 로그정보 표출이 아닐까 싶다. 아무튼 해당 DataGrid를 표출하는 방법에 대해 적어보고자 한다. 바로 코드 고고 이번엔 MVVM 패턴으로 작성해보도록 하자..!! 일단 UI 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 Colored by Color Scripter cs 복잡하게 하지않는다.. 단순 DATAGRID 1개와 BUTTON 3개가 끝....
29번째... 이번에도 쉬어가는 부분.. 모든 개발은 혼자서 진행할 수없다... 뭐 간단한 프로젝트나, 학교숙제라면 가능하지만.... 개발을 혼자 하지않는다면 코드 병합이 참으로 중요하다... 내가 작업을 한것을 다른사람과 공유되어야 하고 다른사람이 작업한게 나에게 공유되어야 하고... 그리하여 Git이라는 코드병합 방법을 말한 적이 있다. 2021.11.01 - [사소한 아이의 소소한 스킬] - 022. Git 분명 Git도 굉장히 좋지만... 나는 사실 Git은 많이 쓰지 않고 SVN을 주로 사용하였다.. SVN이란 자체 Local에 서버를 두고 해당 Local 서버를 동기화 서버로 하는 것( Git은 클라우드 기반, SVN은 Local 기반으로 생각하면 좋겠다) Git은 계정만 만들면 클라우드에 알..
살짝 가벼운 주제.. 코딩을 하면서 if문을 사용안할수가 없다. if문 안에는 true/false를 나타낼수 있는 조건문을 넣어야 한다. 즉, 1 2 3 4 5 6 7 8 9 10 11 12 13 bool bflag = true; if( bflag ) { /// true } else { /// false } cs 이러한 형태로 구성을 하여야 할 것이다. 그렇다면 저 bflag 부분은 저렇게만 넣을 수 있는가? 당연히 아니죠.. 2가지, 3가지의 변수값을 확인 해야 할 때도 있다. 이런 상황 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 bool bflag1 = true; bool bflag2 = true; bool bflag3 = true..
UI Thread에 대해서 알아보자.... (기본적으로 지금부터 하는말은 내가 이해한 수준으로 하는 말이므로 실질적으로는 다를수도 있다...) WPF의 경우 UI에 데이터를 변경 할 시에는 UI Thread라는 Thread에서 모두 처리가 된다. 즉, 우리는 단순히 Label의 Content를 수정하지만, 내부적으로 파고 들어가면 UI Thread가 해당 작업을 해준다는 것.. 그만큼 우리가 신경쓸게 많이 없단 이야기!! 그만큼 편하다!!!! 하지만 이러한 문제 때문에 문제가 발생되는 경우도 존재한다. WPF의 기본 Thread(MainWindow의 작업)에서는 문제가 발생하지 않지만, 만약 다른 Thread를 만들어서 처리를 한다면. UI Thread와 새로 만든 Thread간의 UI Component..
이번엔 압축하기와 압축해제하기.. 보통은 그냥 반디집으로 다 압축해버리지... 누가 또 프로그래밍을 해서...하겠는가..... 근데 또 모를일이지...압축까지 해버리면.....또 편하니깐..... 그러니..압축하는것과 압축해제하는 부분을 해보자!! 바로 코드 ㄱㄱ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 Colored by Color Scripter cs 일단 UI는 뭐가 없다... 그냥 버튼3개.. 압축버튼/압축해제 버튼/폴더압축버튼!! 각각 버튼에 Code-behind에다가.... 처리... 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ..
이번에는....기술 포스팅이라기보단... 그냥 통계정보들을 적어보자...... 기본적으로 나는 C#만 사용한다....... 뭐 물론 C/C++/QT 등도 좀 사용할줄은 알지만.... 필드에서 사용할 수준은 못되는거같다. 이직을 하려고 이직사이트를 확인해보면.. C/JAVA/파이썬 등을 많이 구하는것을 볼수 있다.. C#은 왜이렇게 없을까.....C#을 잘 사용하지 않는것인지...... 그리하여 C#을 얼마나 사용하는지 확인해보자..... 전세계적으로 사용되는 순위다... 최신 2021.11월 자료..! 위에 말했던 언어들이.... 상위1,2,3위..많은 이유가 있었...... 1위는 파이썬, 2위는 C, 3위는 자바. 4위 C++, 5위 C# 그래도 5위다.. C#!! 근데 왜...없을까...........
25번째까지 왔다... 사실 내가 적으면서도... 약간 대충 적는것도 있고... 큰 설명을 적지않는거 같아 좀 그렇지만. 꼭 필요한 부분들은 적는거 같으니...... 세세한 내용은 msdn이나...stackoverflow를...... 일단.. 이번엔 Task와 Thread다.. 사실 프로그래밍을 하다보면 일반적으로 thread를 굉장히 많이 쓰게 된다... 그러면서도 어려운게 thread...... thread형태로 가면 WPF 경우 UI Thread와의 충돌도 생길수 있고... lock 부분의 문제도 생길수 있고 (이부분은 2021.10.19 - [사소한 아이의 소소한 스킬/C#] - 001. Thread Safe) 이거를 추가로 함 봐보자!! 아무튼.... 그리하여 thread와 task 사용법에 대..
이번엔 Chart를 써보자...... 일반적인 Line Chart... 나는 지금까지 Chart는 Infragistics의 Chart만 써보았지만.... 이게 참...애매한거같아서.... 그냥 무료 Chart를 한번 써보도록해보자... 일단.. Chart를 쓰려면... 기본 프로젝트 생성 후에......... NuGet에서 Livechart를 검색해서 설치해주자..!! NuGet은 아래와 같이 Project 에서 우클릭해서 NuGet 패키지 관리를 누르면 나온다. 설치가 완료되면 준비단계는 끝..!! xaml에서 아래와 같이 입력해주자. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Colored by Color Scripter cs 이러면 기본 Grid에 Line Ch..
String Operator다. 말이 어렵지.. 그냥 string 에 string 더하는 연산.......... 즉 "A" + "B" = "AB" 이거... 이거를 어떻게 진행하느냐.... 어렵지 않지... 고냥... 1 2 3 string A = "A"; string B = "B"; string C = A + C; cs 이게 끝........ 이리 쉬운걸 왜 포스팅을............ 근데 만약 이런 작업이 10000번을 수행한다면?? 그래도 뭐 문제없이 작동은 된다... 하지만.... 시간이?? 그래 10000번은 좀 기다린다 치자... 그러다면 100000번 해야한다면? 사실 이런 경우를 안만드는게 가장 베스트겠지... 하지만 굳이 수행해야한다면..?? stringbuilder를 사용하면 그나마..
기술은 아니고.... 나도 써본적은 없지만... 관심은 있던... Git... 사실 집에서는 코딩을 하지않고(직업병인가..) 회사에서만 하는데... 회사는 자체 SVN 서버(외부망 접속 가능)를 두고있으니.. 굳이... 그리고 약간 또 불안한 느낌도 없지않아 있기도하고.... 결국 자료가 클라우드에 저장되는거니...... 아무튼... 개인적인 용도로 쓰기엔 나쁘지않겠다 싶은 Git이다!! Git은 간단히 말하면 소스 저장소, 즉 SVN과 동일하다. 하지만 SVN의 경우 로컬에 저장소도 저장해두어야 하고, 관련 설정도 해주어야 하고... 귀찮은게 한두개가 아니다.. 하지만 Git은 이것저것 간단하게 다 제공해주므로... 단순 Visual Studio랑 연결만 해주면 Git에 저장소가 알아서 생성/알아서 관..
이번엔 Multi Trigger이다. 말그대로 여러개의 Trigger라고 생각하면될듯싶다 즉 1 2 3 4 5 if( 조건1 && 조건2) { // 수행 } cs 이런거로 보면 될듯 싶다. 코드 ㄱㄱ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 Colored by Color Scripter cs CheckBox를 2개 두고 2개가 모두다 check되면 글씨의 색상과 내용을 변경하는 코드.. 어렵지 않죠..? 수행화면 굳.! 코드는
이번엔 Data Trigger이다. 모든 Trigger가 그렇듯.. 코드 비하인드의 if문을 생각하면 좋다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 if( 나는 부자다 ) { /// 돈을 쓰자 } else { /// 열심히 모으자 } cs 이러한 if문을 xaml로 쓰는게 trigger문.. 이번엔 Data Trigger이다. Data Trigger... 이름만 봐도 뭐.. Data를 비교하여 수행하는 것.. 바로 코드 ㄱㄱ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 Colored by Color Scripter cs 이거도 ..
Property Trigger에 이어 이번엔 Event Trigger다 Event Trigger는 특정 Event가 발생되었을때 수행되는 Trigger다 코드 ㄱㄱ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 Colored by Color Scripter cs 코드가 길긴하지만..... 보면 뭐 없는 코드다. 일단 1개의 Rectangle을 선언해주고.. 그 Rectangle의 Style을 지정해준다. 그후 Event Trigger를 선언..!! 마우스가 Rectangle 위로 올라왔을때와 내려왔을때 2가지를 선언해주고. Rectangle의 ..
이번엔 UI의 스타일을 알아보자... 그중에서도 Trigger... Trigger는 기본적으로 4가지가 존재한다. Property : 기본 Property값을 변경 할시 Event : Event가 발생될 시 Data : Binding 문법으로 연결된 데이터가 수정될 시 Multi : 조건을 다수 적용 할 시 이중에서 첫번째 Property Trigger에 대해 알아보자.. 간단한 Trigger를 만들어보았다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 Colored by Color Scripter cs Rectangle을 하나 만들고... Trigger를 통해 Rectangle의 Fill값을 변경하도록 한 코드.. 코드가 어렵지않아 확..
주지님
'WPF' 태그의 글 목록