본문 바로가기
반응형

C#32

[Form] 서브폼을 활성화하지 않고 표시하기 폼을 활성화 하지 않고 표시 음 그러니까 메인폼에서 새로운 폼을 호출 하 되, 포커스는 메인폼에 유지하고 싶을 때를 말한다. Utility Class user32.dll 을 임포트하여 Win32API를 이용하는 유틸리티 클래스를 정의한다. SetVisibleNoActivate 메소드에서 SetWindowPos Win32API를 호출한다. 윈도우 스타일로 SWP_NOACTIVATE 플래그를 지정함으로 구현하는 것 같다. public static class UtilFuncs { [DllImport("user32.dll")] extern public static bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int x, int y, int cx, int cy.. 2012. 1. 10.
[Radio] 라디오 버튼 포커스 RadioButton 컨트롤 인스턴스의 Focus() 메소드를 호출하면 RadioButton 컨트롤 인스턴스의 Checked 속성이 true가 되는군요. 원래 MFC때부터 그래왔었나 모르겠네요. MSDN을 잘 못 읽었는지 그런 내용은 못찾았는데.. 2012. 1. 10.
[Form] WInForm 을 이용한 지역화 WinForm 을 사용한 프로젝트가 있는데 한국, 미국이 아닌 제 3국에도 릴리즈 되는 제품이라 지역화를 하게 되었다. Visual Studio 에서 WinForm 디자이너에서 속성을 이용해 쉽게 다른 언어로 지역화가 가능하다. 문제는 지역화할 폼이 많고, 또한 제 3국의 언어로 변환해야 한다면 개발자가 일일이 변환해야 하는것은 불가능! 또한 그 많은 폼에서 사요하는 문자열 리소소를 3국 언어로 변환해서 다시 개발자가 일일이 변환하는 것도 불가능!! WinRes.exe 위와 같은 문제 때문에 Visual Studio 에서 별도의 툴로 지원한다. 폼 디자이너를 그대로 가져온듯 하다. 위치는 C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin\WinRes.exe 물론 V.. 2012. 1. 10.
스레드로부터 안전한 방식으로 Windows Forms 컨트롤 호출 스레드로부터 안전한 방식으로 Windows Forms 컨트롤 호출 프로그램이 조금 복잡해 지면 스레드를 사용하게 된다. WinForm 으로 멀티 스레드를 사용하다가 스레드가 컨트롤에 접근 하려 하면 예외가 발생한다. (역시 C# 컴파일러는 냉정하다...) 예외 : InvalidOperationException 설명 : "control name 컨트롤이 자신이 만들어진 스레드가 아닌 스레드에서 액세스되었습니다." 이 예외는 디버깅 할 때 발생하며, Run-time 때는 발생하지 않는다. (프로그램을 강제 종료 시키지도 않더라.) CheckForIllegalCrossThreadCalls 프로퍼티 값을 false 로 설정하면 위 예외를 발생시키지 않게 할 수 있지만 안정적인 프로그램 작성을 위해 위 예외 처리.. 2012. 1. 10.
[Form] WinForm 시작과 종료 이벤트 WinForm 시작과 종료 이벤트 Form 및 Control 클래스는 응용 프로그램 시작및 종료와 관련된 이벤트 집합을 노출합니다. Form의 시작 Windows Forms 응용프로그램을 시작할 때 기본 폼의 시작 이벤트가 다음 순서로 발생 합니다. ● Form.Load - Form이 로드되어 메모리에 올라올 때, 화면에 표시되기 직전에 발생 - 프로퍼티를 변경한다거나, 리소스를 할당하는 등 Form의 동작에 필요한 초기화 수행 - Form의 생애 동안 딱 한 번만 발생하므로 일회적인 초기화에 적합 - Form.Load 이벤트 보다 Form 클래스의 생성자가 먼저 호출 된다. Form의 종료 응용 프로그램이 닫히면 기본 폼의 종료 이벤트가 다음 순서로 발생 합니다. ● Form.Closing - Form.. 2012. 1. 10.
[Form] 타이틀바 잡지않고 폼이동 public partial class Form1 : Form { [DllImportAttribute("user32.dll")] public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); [DllImportAttribute("user32.dll")] public static extern bool ReleaseCapture(); public Form1() { InitializeComponent(); } private void Form1_MouseDown(object sender, MouseEventArgs e) { if(e.Button == MouseButtons.Left) { ReleaseCapture(); Send.. 2012. 1. 9.
반응형