본문 바로가기

Dev::DotNet/C#

(15)
Service Project 를 쉽게 디버깅하기 Service Project를 만들고 디버깅을 하려고 하면 참 번거롭다. 우선 Visual Studio에서 실행이 안된다. 그래서 이것저것 번거로운 방법들이 있지만, 그나마 조~~금 덜 번거로운 방법으로.... 닷넷에 보면 1System.Diagnostics.Debugger.Launch();cs 라는 것이 있고 아래와 같이 설명하고 있다. 원하는 위치에 해당 Debugger.Launch(); 를 끼워 넣고 빌드 후, 만든 서비스를 등록하고 시작을 하면 해당 위치에 자동으로 Breakpoint로 잡히게 된다. 단, 해당 소스를 Visaul Studio 관리자 모드로 실행시켜놓은 상태여야 한다.
new 한정자(new Modifier) class 를 상속받으면 당연히 상속받은 class 의 속성과 기능을 사용할 수 있다. 하지만 흔히 기본 클래스의 기능을 변경하여 사용하며그럴 때는 virtual 을 사용하던 abstract 를 사용하던 다양하게 재정의가 가능하다. 하지만 new 한정자를 사용해서도 가능하다. MSDN 에는 "한정자로 사용되는 new 키워드는 기본 클래스에서 상속된 멤버를 명시적으로 숨깁니다." 라고 적혀있다. 12345678910111213class Class1{ public void TestMethod() { }} class Class2 : Class1{ public void TestMethod() { }}cs 하나의 클래스를 상속을 받아서 부모 클래스가 가지고 있는 메소드와 동일한 이름의 메소드를 자식에 선언하면Vi..
확장 메소드(Extension Methods) 확장 메소드는 기존 Type 에 메소드를 추가할 수 있게 해준다. 예를 들어 TextBox 에 AppendText 라는 메소드가 있습니다.TextBox 에 문자열을 추가하는 기능을 합니다. 하지만 자동으로 개행이 되는 AppendText 가 필요하다고 하면 (그냥 NewLine 을 붙여도 되겠지만....)TextBox 를 상속받아서 AppendText 메소드를 추가해야 한다. 1void AppendText(string textData, bool IsNewLine)cs 그렇게 되면 상속받아서 만든 TextBox 의 인스턴스에서만 사용이 가능하며예시처럼 컨트롤이라면 디자인에 올라간 컨트롤도 교체를 해야한다. 하지만 확장 메소드를 이용하면 쉽게 해결이 가능하다. 1234567public static class..
DLL 레지스트리 등록 API API 로 DLL 등록 12345678910111213141516171819202122232425262728293031323334353637using System.Runtime.InteropServices; ... [UnmanagedFunctionPointer(CallingConvention.Cdecl)]private delegate void _DLLPROC(); [DllImport("kernel32.dll", EntryPoint = "LoadLibrary")]private extern static int LoadLibrary(string librayName); [DllImport("kernel32.dll", EntryPoint = "GetProcAddress", CharSet = CharSet.Ansi..
Google gmail 로 메일 보내기 - c#, smtp google 의 gmail 로 메일 보내기 123456789101112131415System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage();message.From = new System.Net.Mail.MailAddress("보내는 이메일 주소");message.To.Add("받는 사람 이메일 주소");message.SubjectEncoding = System.Text.Encoding.UTF8;message.BodyEncoding = System.Text.Encoding.UTF8;message.Subject = "제목";message.Body = "내용";message.Attachments.Add(new System.Net.Mail.A..
마우스 이동에 따른 화면 이동 Form 이나 Window 을 특정 모양으로 구성할 때 보통 별도 컨트톨을 이용해서 Caption 을 표시할 것이며 해당 Caption 을 구성한 컨트롤을 이용하여 화면(Form or Window) 을 이동시켜야 한다. 순진했을때는 mouse 위치를 가지고 계산해서 하려고 했었는데 그런 번거로운 작업없이 쉽게 구현이 가능하다. WPF 에서는 Window 자체에 해당 기능의 메소드를 제공해준다.public class Window : ContentControl, IWindowService{……. // // 요약: // 마우스 왼쪽 단추를 누른 상태로 창 클라이언트 영역의 노출된 영역에서 창을 끌 수 있게 합니다. // // 예외: // System.InvalidOperationException: // 왼쪽 ..
GZipStream 을 이용한 문자열 압축 [Compress] using System; using System.Text; using System.IO; using System.IO.Compression; public String Zip(String decompressed) { string sResult = string.Empty; byte[] data = Encoding.UTF8.GetBytes(decompressed); using (MemoryStream input = new MemoryStream(data)) { using (MemoryStream output = new MemoryStream()) { using (GZipStream gzip = new GZipStream(output, CompressionMode.Compress, true)..
System.Drawing.Printing.PageSettings 의 PrintableArea 프로퍼티에 대한 문제 별도의 출력을 만들때 System.Drawing.Printing.PageSettings 객체를 통해서 이것저것 사용할 때가 있다. 문제는 그안에 PrintableArea 라는 RectangleF 를 반환하는 프로퍼티가 있다. 해당 값을 통해서 출력 가능영역을 계산할 수 있는데..... 대충 예를 들어서 이런식으로 쓴다고..하면 System.Drawing.Printing.PageSettings PageSettings = new System.Drawing.Printing.PageSettings();... float y = PrintableArea.Height;float x = PrintableArea.Width;float v1 = PrintableArea.Height - PrintableArea.Y;floa..