본문 바로가기

Programing/닷넷

(41)
[C#] WinForm - Drag & Drap 구현하기 (아이콘 변화) DragEnter라는 이벤트가 발생할 때 인자로 넘어온 DragEventArgs의 Effect 속성을 부여해주는 것으로 구현 가능하다. 처음에 보이는 기본 뼈대는 아래와 같다.private void MainForm_DragEnter(object sender, DragEventArgs e){} 여기에 e.Effect에 DragDropEffects.Copy 라는 지정을 하면 아래 그림처럼 아이콘이 바뀐다.private void MainForm_DragEnter(object sender, DragEventArgs e){e.Effect = DragDropEffects.Copy;} DragDropEffects 열거형은 Scroll, All, None, Copy, Move, Link의 6가지 경우가 있다.파일을 드..
[Winform] 단축키(Accelerator) System.Windows.Forms의 ProcessCmdKey 메서드가 있다.namespace System.Windows.Forms{public class Form : ContainerControl{// ...protected override bool ProcessCmdKey(ref Message msg, Keys keyData); // ...}}이것을 오버라이드 한다. (예)protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { if (keyData == (Keys.Control | Keys.F)) { MessageBox.Show("What the Ctrl+F?"); return true; } return base.ProcessC..
[C#] 환경변수 - 시스템폴더 C:\Windows\system32
Enum에 Description 확장메소드 추가하기 NUnit 테스트 쪽using NUnit.Framework; [TestFixture] class EnumExtsTests { [Test] public void TestGetDescription_Description문자열가져오기() { Assert.AreEqual("The operation completed successfully.", Windows.ErrorCodes.ERROR_SUCCESS.GetDescription()); } [Test] public void TestGetDescription_Description속성은빈문자열획득() { Assert.AreEqual("", Windows.ErrorCodes.ERROR_INVALID_FUNCTION.GetDescription()); } } public c..
[콜백] System.Action<T>로 함수인자 구현하기 (AsyncWorker) Node.js 때문에 자바스크립트 프로그램을 하고 났더니, 비동기 함수에 익숙해졌다. 혹시 비동기함수에 대해 이해가 안된단다면, 아래의 코드를 실행을 해보면 이해가 빠르겠다.function foo() { console.log('before'); setTimeout(function() { console.log('Something doing'); }, 1000); console.log('after'); } foo(); 실행결과는 아래와 같다. 'Something doing'이 'after'가 찍히고 난 후에 찍힘을 알 수 있다. 사실 초첨은 코드의 굵은 글씨로 표시된 부분이다. C에서는 함수포인터라고 하고, 자바스크립트에서는 함수도 객체이기 때문에 자유자재로 인자로 넘기는 것이 자유롭니다. C#에서는 어떻게..
DeviceMock - Func<T> 델리게이터 테스트 주도 개발을 하다보면 데스트 더블(스텁, 목, 스파이...)을 사용하게 된다.TDD가 오래되다 보니 Mock 프레임워크가 있다. 그런데 구미에 맞는 것을 수행하기 어려운게 있다. 예를 들면 네트워크 통신 등이 있다.장치와 교신하는 서버를 만들일이 있는데 Socket 클래스를 래핑을 하는 방법을 사용해서 실제 통신과 가짜 객체를 바꾸도록 하였다. 인터페이스야 Receive와 Send 메소드만 있으면 되었는데 문제는 Send호출이 제대로 되었는지, Receive할 데이터를 테스트 마다 설정을 해줘야 할 필요가 있었다. C#에 있는 함수 델리게이터를 이용해서 구현을 하였다. 결국은 ByteArrayDevice를 써서 이 Mock은 deprecate 되었지만 나중을 위해 기록을 한다. public cla..
[C#] 내부 배열은 Int32.MaxValue 요소 이상으로 확장할 수 없습니다. 현상System.Runtime.Serialization.SerializationException : 내부 배열은 Int32.MaxValue 요소 이상으로 확장할 수 없습니다. 닷넷 프레임워크의 스펙의 한계이다. NUnit으로 테스트를 생성했을 때,, [Test] public void TotalPages_OnlySetCopyColorPage_ShouldBeAsSet( [Random(0, 100, 10)] int copyBlackPage, [Random(0, 100, 10)] int copyColorPage, [Random(0, 100, 10)] int printBlackPage, [Random(0, 100, 10)] int printColorPage, [Random(0, 100, 10)] int scanP..
[C#] DateTime.Now 분석 닷넷에는 시스템의 시간을 가져오는 방법은 DateTime.Now을 쓰면 간단하다.그런데 반대로 시스템의 시간을 설정하는 방법은 사람들은 잘 모르는 것 같다. StackOverflow 같은데 보면 Win32 함수를 마샬링해서 쓰는 방법뿐이다.심지어 MSDN도 마찬가지이다. How to: Get or Set the System Time GetSystemTime 와 SetSystemTime 함수를 Invoke해서 구현을 해놓았다. MSDN에도 그러하니 DateTime.Now는 내부적으로 GetsystemTime을 호출해서 DateTime 객체로 돌려주는 거겠지 생각을 했는데 틀렸다. 우선 Now는 아래와 같은 프로퍼티이다.public static DateTime Now{ get { return UtcNow.T..