c# control.enabled를 false로 한 때 주의할 점
비주얼 컨트롤의 enabled를 false로 하면 이건 없는 거로 처리된다. 예를 들어 두 개의 버튼들을 겹쳐 놓고 앞의 것을 enabled = false로 해 보자. 앞의 버튼을 클릭하면 이게 enabled 되어 있지 않으므로 아무 반응도 없어야 할 거 같지만 뒤에 가려져 있는 버튼의 클릭 이벤트가 실행된다. 앞의 컨트롤을 뚫고 뒤의 컨트롤을 클릭한 거로 작동한다.
비주얼 컨트롤의 enabled를 false로 하면 이건 없는 거로 처리된다. 예를 들어 두 개의 버튼들을 겹쳐 놓고 앞의 것을 enabled = false로 해 보자. 앞의 버튼을 클릭하면 이게 enabled 되어 있지 않으므로 아무 반응도 없어야 할 거 같지만 뒤에 가려져 있는 버튼의 클릭 이벤트가 실행된다. 앞의 컨트롤을 뚫고 뒤의 컨트롤을 클릭한 거로 작동한다.
ints1.Except(ints2)는 ints1에는 있지만 ints2에는 없는 아이템(들)을 반환한다. 배열에도 쓸 수 있다.
ContextMenuStrip은 .네트의 팝-업 메뉴이다. 쉽게 와닿는 이름이 아니라서 헤매기 십상이다. 레퍼런스에는 shortcut menu라고 되어 있다. 낯설긴 마찬가지다. 예전에 ContextMenu로 쓰이던 게 이거로 바뀌었다. 이걸 만든 뒤 DataGridView.ContextMenuStrip처럼 이게 작동할 대상의 프라퍼티로 설정하면 된다. 작동해야 할 대상이 여럿일 때에는 ToolStripMenuItem.Click가 어디에서 작동해야 하는지 특정해야 한다. 예를 들어 하나의 ContextMenuStrip을 만들어 여러 DataGridView에 연결한 경우 이 이벤트의…
레퍼런스에 보면 정수형의 크기는 비트로 나와 있고 실수형의 그것은 바이트로 나와 있다. 서로 단위가 다르게 나와 있어서 헷갈릴 수 있는데 long과 double이 차지하는 메모리의 크기는 서로 같다.
프로세스들 사이에서 대이터를 주고 받아야 할 때가 있다. 예를 들어 이런 경우에 쓸모 있다. ls증권의 api를 이용한 애플리캐이션은 32 비트로만 빌드를 할 수 있다. 32 비트 애플리캐이션은 메모리를 원칙적으로 2gb까지 이용할 수 있으며 변칙적으로 4gb까지도 가능하다. 사실적으로는 3gb 정도까지 쓸 수 있다. 이는 커다란 제약이다. 위의 api로 32 비트 서버 애플리캐이션을 만들고 64 비트 클라이언트…
const로 선언하면 상수가 속한 클래스의 인스턴스를 만들지 않고도 다른 클래스에서 상수를 읽을 수 있다. 위 예제에서 Form2의 인스턴스를 만들든 만들지 않든 상수의 값은 바뀌지 않는다. 따라서 그냥 읽을 수 있게 한 거다. 기술적으로 설명하면 상수는 static으로 선언한 셈이다. 그래서 static으로 선언할 수 없다. 이미 선언되어 있기 때문이다. The static modifier isn’t allowed in a constant…
위 코드에서 ChildClass의 인스턴스는 두 개 생긴다. parentClass.ChildClass는 ParentClass parentClass = new()로 parentClass가 만들어질 때 parentClass의 컨스트럭터가 생성하고 childClass는 ChildClass childClass = new(parentClass)로 만들어진다. parentClass.ChildClass와 childClass는 부모 클래스는 parentClass로 같다. 하나의 부모 클래스 아래에 두 개의 서로 다른 자식 클래스들이 있는 거다.
아래의 코드에서 TestMethod1는 멀티 뜨레드에서 작동한다. 이 메떠드는 다른 뜨레드에서 실행되는 메떠드와 동기화되어야 한다. 그러면서 await도 해야 한다. await를 lock 블록 안에서 쓰면 오류로 처리된다. 만약 await가 긴 시간을 쓴다면 lock이 걸린 다른 뜨레드는 그 시간을 기다려야 하기 때문이다. 이러면 멀티 뜨레드를 쓰는 의미가 줄어든다. 아래의 코드처럼 lock 블록 안에서 네스티드 메떠드를 만들어 await를 쓰면…