본문 바로가기

개발 이야기163

C# WPF 다른버튼 클릭하기 안녕하세요 마블랑입니다. C# 프로그래밍 중에 다른 버튼을 자동으로 클릭해줘야 할때 윈폼(Winform)에서는 버튼 클래스의 PerformClick() 함수를 이용했습니다. 오늘 그렇게 해서 WPF에서 다른 버튼을 실행하려고 했었는데요 버튼 클래스에 PerformClick() 함수가 없다고 나오네요 (아마도 윈폼과 WPF에서 사용하는 버튼클래스가 다른 모양입니다.) 이제 어쩌나.. 하고 있다가 바로 찾아보니까 WPF에서 버튼을 자동으로 클릭하는 방법이 있더군요. 샘플 코드를 먼저 살펴보겠습니다. Button_Click 이벤트처럼 구현하면 됩니다~ 정확한 구동 과정을 사진을 찍을수는 없겠지만 실행하고 위에 있는 버튼만 클릭해도 아래처럼 출력되는것이 보입니다~ 바로 복사해서 사용할수 있도록 코드로 정리해보았.. 2020. 7. 21.
윈도우 파일내 텍스트 검색 방법 안녕하세요 마블랑입니다. 윈도우에서는 기본적으로 파일검색을 제공합니다. 하지만 아쉽게도 파일명에 대한 검색이죠 고급설정에 들어가면 파일명 뿐만 아니라 파일 내용에서도 검색을 하여 결과를 보여줄수도 있는데요 사용을 해보니 설정을 잘못했는지 결과리스트가 맞게 출력이 되지 않더군요. 그래서 윈도우에서 파일 내용에 있는 문자열을 검색하는 방법을 새로 알아보았는데요 리눅스에서는 grep? 명령어를 사용하여 파일 내에 있는 문자열도 검색해서 편리하게 사용했었었죠. 가끔 프로그래밍을 하다보면 제목뿐만 아니라 내용 검색이 있었으면 좋겠다라고 생각한적이 한두번이 아닙니다,, 파일 내용에 있는 문자열을 검색하는 툴들이야 많긴 많겠지만 이번에 알아볼 방법은 아주 간단하게 윈도우에서 제공하는 기능으로 파일 내용에 대한 검색을.. 2020. 7. 9.
C# WPF 클릭위치 구하기 안녕하세요 마블랑입니다. 이번 포스팅은 C# WPF 마우스가 클릭된 위치를 구하는 예제입니다 보통 클릭위치를 구할때는 이벤트를 이용하는데요 클릭되었을때 위치를 이벤트에서 전달받을수 있습니다. 그렇지만 버튼컨트롤을 제외하고는 클릭이벤트가 대부분 없을겁니다. 그래서 클릭이벤트와 비슷한 MouseDown 이벤트와 MouseUp 이벤트를 이용해서 클릭위치를 구하는데요 가장 기본적으로 클릭이벤트를 지원하는 버튼 클래스에서는 클릭이벤트에서 클릭위치를 전달받을수 있을줄 알았는데 아니더군요. 버튼 컨트롤도 MouseDown 이나 MouseUp 이벤트를 이용하면 클릭위치를 구할수있습니다~ 코드는 아래와 같이 구현하면 됩니다~ 굳이 정수형 변수로 대입할 필요없이 바로 Point 객체에서 위치를 가져올수 있습니다. priv.. 2020. 6. 29.
C# 데이터베이스 프로시저 실행하기 안녕하세요 마블랑입니다. 이번 포스팅은 C# 에서 데이터베이스에 이미 등록해놓은 프로시저(Procedure)를 실행하는 방법입니다. C#에서 데이터베이스를 연동하는 방법은 이전에 포스팅으로 따로 정리를 해두었습니다. 데이터베이스 연동이나 쿼리 실행에 대해서 아직 모르는 분이 있을지 몰라 이전 데이터베이스 연동 포스팅의 링크를 걸어두었습니다~ 2020/06/24 - [개발 이야기/C# 이야기] - C# Mssql 연동하기 C# Mssql 연동하기 안녕하세요 마블랑입니다. 이번 포스팅은 C# 프로그램에서 데이터 베이스 Mssql을 연동하는 방법입니다. 이전에는 ODBC를 이용해 데이터베이스와 연동하는 방법에 대해 포스팅을 했었는데 이번에� sosobaba.tistory.com 그리고 C#에서는 가비지 컬렉터.. 2020. 6. 24.
C# Mssql 연동하기 안녕하세요 마블랑입니다. 이번 포스팅은 C# 프로그램에서 데이터 베이스 Mssql을 연동하는 방법입니다. 이전에는 ODBC를 이용해 데이터베이스와 연동하는 방법에 대해 포스팅을 했었는데 이번에는 ODBC연동없이 데이터 베이스를 연동하고 활용해보도록 하겠습니다. 간단하게 Mssql 데이터베이스와 연결하고 테스트 테이블에 간단한 데이터를 입력한 뒤에 방금 그 테이블에서 데이터를 조회를 하려고합니다. 정리해서 말하면 Mssql 연결 (Connect) -> 데이터 삽입 (Insert) -> 데이터 조회 (Select) 이런 단계 입니다. 코드는 어렵지 않고 간단해서 위 단계를 한번에 구현했습니다. //Mssql 연결 SqlConnection sqlcon = new SqlConnection("Server=127... 2020. 6. 24.
Sql 쿼리문 SELECT 컬럼명 치환, 변경 안녕하세요 마블랑입니다. Sql 쿼리(Query)문에서 데이터를 조회해서 가져오는 SELECT 문이 있습니다. 데이터 조회를 원하는 테이블에서 모든 컬럼의 데이터를 가져오려면 '*'를 입력하면 되고 특정 컬럼들만 가져오고 싶다면 '*' 자리에 컬럼명1, 컬럼명2, 컬럼명3 이런식으로 넣어주면 됩니다. 추가로 조건에 해당하는 데이터만 가져올수도 있고 컬럼을 지정하고 오름차순, 내림차순 정렬을 할수 있습니다. 기본적인 SELECT문의 활용은 이러합니다. 이번 포스팅은 실제로 많이 사용되는지는 모르겠지만 그래도 알아두면 좋은 SELCET 문의 응용에 대해서 설명하려고 합니다. 바로 데이터를 가져올떄 컬럼명을 변경 또는 치환하여 변경된 컬럼명으로 데이터를 조회하는 것인데요 아주 간단합니다. 위에서 언급한 '*'.. 2020. 6. 23.
C# WPF 사용자 컨트롤 Xaml에 추가하기 안녕하세요 마블랑입니다. C#에서 제공해주는 기본 컨트롤로도 UI프로그램을 만들기에는 충분하지만 요즘 시대에 중요시 되는 디자인이 별로 좋지 않죠.. 가끔 기본 컨트롤을 이용해 기능을 추가하여 사용할때도 있고 다양합니다. 그래서 기본 컨트롤을 상속받아 기능을 추가하여 사용자 컨트롤을 만들기도 하고 그러는데요 C#의 WPF 에서 그렇게 만든 사용자 컨트롤을 XAML에 추가하고 사용해 보도록 하겠습니다~ 프로젝트 생성은 건너뛰고 바로 사용자 컨트롤을 만들어 보겠습니다~ 생성한 클래스는 메인과 같이 두어도 되지만 Lib이라는 폴더를 생성해 클래스끼리 관리하는게 더 보기 좋겠죠? 사용자 컨트롤 만드는 법은 굉장히 쉬운데요 클래스를 추가하고 상속을 해주면 됩니다. 이때 생성자를 public으로 해줘야 xaml에 .. 2020. 6. 23.
C# WPF 투명 GIF 이미지 띄우기 안녕하세요 마블랑입니다. C# WPF에서 투명 GIF 파일을 프로그램으로 띄우는 코드입니다. WPF에 있는 기본 컨트롤 MediaElement 컨트롤을 이용했습니다. 사각형모양의 투명이 없는 GIF는 단순히 MediaElement로 동영상을 재생하듯이 GIF이미지를 띄워주면 됩니다. 그런데 투명이 있는 GIF파일을 띄우려면 약간의 문제가 발생하는데요 GIF파일 영역중 투명부분이 검은색으로 표시가 됩니다. 이것을 투명하게 하고 배경이 보이도록 하려면 아래와 같이 XAML 코드와 .cs 파일 코드를 구현하면 됩니다. XAML .CS using System; using System.Windows; using System.Windows.Media.Imaging; namespace WPF_GIFTester { p.. 2020. 6. 22.
C# BackgroundWorker 구현하기 안녕하세요 마블랑입니다. 프로그램을 개발할때 관리하기 힘든 쓰레드(Thread)를 구현할때는 상당히 스트레스를 받습니다. 쓰레드 종료에 대해서 살짝 깜빡하다보면 계속 돌아가기도 하고 디버그도 하기 힘들다고 생각합니다. 그래도 어쩔수 없이 쓰레드를 구현해야할때가 있는데요 보통 소켓통신할때가 그렇죠.. C#에서 Thread 클래스를 사용하여 Thread를 구현할수도 있지만 이번 포스팅에서는 "BackgroundWorker" 라는 클래스를 이용해서 쓰레드를 구현해보겠습니다. 메인 생성자에 newThread의 객체를 등록하며 쓰레드 이벤트도 함께 추가합니다. using System; using System.ComponentModel; using System.Threading; using System.Window.. 2020. 6. 19.
C# using으로 메모리 관리 안녕하세요 마블랑입니다. C#은 기존의 C나 C++로 길게 구현하던 코드를 간단하게 몇줄로 아주 쉽게 구현할수 있습니다. 물론 그 문법에 대해서 잘 이해하고 써야되는데요 대표적으로 람다식이 그렇다고 생각합니다. 또한 C#은 C와 C++ 과는 달리 자동으로 가비지 컬렉터가 스스로 메모리를 관리해주기 때문에 메모리에 크게 신경쓰지 않아도 됩니다. 그래도 경우에 따라서는 Close() 나 Dispose()를 해줘야하는데요 그것조차도 문법에서 알아서 자동으로 해주는 방법이 있습니다. C# 개발자라면 오픈소스를 찾다가도 종종 보게되는 "using()" 이 바로 그것입니다. using 이라면 자바에서의 import나 C,C++에서의 include 처럼 쓰이는 것이라고 생각할수도 있는데요 이 포스팅에서 말하는 usi.. 2020. 6. 19.
C# Textbox 텍스트 박스 자동 스크롤 안녕하세요 마블랑입니다. 이번 포스팅은 C#의 Winform이나 WPF에서 가장 기본적으로 쓸수있는 컨트롤, Textbox(텍스트박스) 에 관한 포스팅입니다. 보통 텍스트 박스는 입력을 받을때 사용합니다. 때로는 프로그램의 Log(로그)를 표시해줄때도 사용하는데요 로그를 표시할때 대부분은 로그가 많아져서 화면에 다 보이지 않고 스크롤을 통해서 기존의 로그도 남기고 새로운 로그도 추가할수 있습니다. 로그를 추가할때는 Textbox.AppendText()를 이용하거나 Textbox.Text += "추가 문자열" 을 이용하는데요 이렇게 문자열 로그를 추가하면 로그들이 텍스트박스의 크기를 넘어갈때 새로운 로그 내용을 볼수 없습니다. 스크롤을 통해 수동으로 아래로 내려 로그를 확인해야하죠 그렇다면 로그 메시지가 .. 2020. 6. 18.
C# TimeSpan으로 시간간격 구하기 안녕하세요 마블랑입니다. C#에서 활용할수있는 시간사이의 간격을 구하는 방법에 대해서 알아보겠습니다. .Net(닷넷) 프레임워크에서 기본적으로 제공해주는 TimeSpan 클래스를 이용하면 두 시간사이의 차이를 구할수 있습니다. 먼저 구현한 코드를 보면서 설명을 하겠습니다. Timespan을 잘 활용하려면 DateTime 클래스도 사용해야합니다. DateTime클래스를 사용하지 않아도 되지만 DateTIme클래스를 이용해 날짜와 시간을 관리하는게 좀더 편리할듯 합니다. 버튼을 클릭하면 시작시간과 끝나는 시간을 기록하고 이 두개의 시간을 이용해서 TImeSpan 객체를 생성합니다. 그리고 Timespan.Subtract를 이용해서 끝나는 시간에서 시작시간을 빼면 두시간 사이의 경과시간을 추출할수 있습니다~ .. 2020. 6. 11.
C# 프로그램에 이미지 포함하기 안녕하세요 마블랑입니다. 비주얼스튜디오나 다른 프로그래밍 언어를 이용해서 GUI 인터페이스를 구현할때 기본적인 컨트롤만 사용해도 어느정도 프로그램을 만들수 있습니다. 하지만 기본적인 컨트롤을 사용하면 사실 프로그램이 오래되 보이기도 하고 디자인이 좋은 모습은 아니죠.. 그래서 다른 라이브러리를 이용해서 기본 컨트롤을 구성하거나 직접 이미지를 넣고 디자인을 꾸며서 프로그램을 한층더 업되 보이게 만들수도 있습니다. 전자의 경우 단순히 라이브러리를 사용하면 되지만 후자의 경우는 이미지를 프로그램에 삽입하여 버튼에 입힐수도 있고 배경화면으로 꾸밀수 있습니다. 어떻게 프로그램에 이미지를 추가하는지에 대해서는 많이 알고 있을거라 생각합니다. 그래서 배포할때도 실행파일과 같이 이미지 파일 등 디자인 파일들을 같이 배.. 2020. 6. 10.
C# nameof로 변수명 알아내기 안녕하세요 마블랑입니다. 다른 프로그래밍언어에 있는지는 모르겠지만 C#에서는 변수명을 알게해주는 연산자가 있습니다~ "nameof"라고 하는 연산자인데요. 보통 변수안에 있는 데이터를 사용하지 변수명은 알 필요가 없어 실제로 사용할일이 있을지 모르겠습니다. 일단 사용법에 대해서 알아보겠습니다. int num = 100029; string NameofTestString= num.ToString(); tb_nameof.Text=nameof(NameofTestString); 아주 간단합니다. nameof() 매개변수에 변수를 넣으면 되는데요 물론 "" 큰따옴표를 제외하고 넣어줘야합니다. 저는 버튼에 위 구문을 넣어두어서 왼쪽 텍스트블록에 문자열의 변수명을 받아왔습니다. 위에도 언급하였었지만 보통 변수의 데이터.. 2020. 6. 10.
C# .Net 다른 프로세스 실행 ( Process, ProcessStartInfo ) 안녕하세요 마블랑입니다. 프로그램 기능에 따라서 본 프로그램이 아닌 다른 프로그램, 즉 다른 프로세스를 실행시켜야 할때가 있습니다. 대체로 WatchDog(와치독) 같은 프로그램이나 런처 프로그램들이 그러한 기능이 필요할거같은데요 C#, 닷넷에서 제공해주는 클래스들을 이용하면 아주 쉽게 간단한 런처와 와치독 프로그램을 만들수 있습니다. 다른 프로그램, 프로세스를 실행하려면 ProcessStartInfo클래스를 사용하면 됩니다. 그리고 추가로 현재 실행되는 프로세스 목록을 확인하려면 Process 클래스를 사용하면 됩니다. 간단한 예제 코드를 보겠습니다. //다른 프로세스, 프로그램 실행하기 private void Bt_execute_Click(object sender, RoutedEventArgs e) .. 2020. 6. 6.