[C#/WPF] TreeView 클래스 : 노드 확장시 Cursors.Wait 사용하기
■ TreeViewItem 클래스의 Expanded 이벤트와 TreeView 클래스의 MouseUp 이벤트를 사용해 트리뷰 노드 확장시 커서를 대기 커서로 표시하는 방법을 보여준다. ▶ 예제 코드
■ TreeViewItem 클래스의 Expanded 이벤트와 TreeView 클래스의 MouseUp 이벤트를 사용해 트리뷰 노드 확장시 커서를 대기 커서로 표시하는 방법을 보여준다. ▶ 예제 코드
■ Environment 클래스의 OSVersion 정적 속성을 사용해 Windows 운영 체제 버전을 구하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
using System; /// <summary> /// 운영 체제 타입 /// </summary> public enum OperatingSystemType { Unknown , Windows95 , Windows98 , WindowsMe , WindowsNT40 , WindowsNT2000 , WindowsXP , WindowsServer2003, WindowsVista , Windows7 } #region 운영 체제 타입 구하기 - GetOperatingSystemType() /// <summary> /// 운영 체제 타입 구하기 /// </summary> /// <returns>운영 체제 타입</returns> public OperatingSystemType GetOperatingSystemType() { OperatingSystem operatingSystem = Environment.OSVersion; OperatingSystemType operatingSystemType = OperatingSystemType.Unknown; switch(operatingSystem.Platform) { case PlatformID.Win32Windows : if(operatingSystem.Version.Major == 4) { switch(operatingSystem.Version.Minor) { case 0 : operatingSystemType = OperatingSystemType.Windows95; break; case 10 : operatingSystemType = OperatingSystemType.Windows98; break; case 90 : operatingSystemType = OperatingSystemType.WindowsMe; break; } } break; case PlatformID.Win32NT : if(operatingSystem.Version.Major == 4) { operatingSystemType = OperatingSystemType.WindowsNT40; } else if(operatingSystem.Version.Major == 5) { switch(operatingSystem.Version.Minor) { case 0 : operatingSystemType = OperatingSystemType.WindowsNT2000; break; case 1 : operatingSystemType = OperatingSystemType.WindowsXP; break; case 2 : operatingSystemType = OperatingSystemType.WindowsServer2003; break; } } else if(operatingSystem.Version.Major == 6) { switch(operatingSystem.Version.Minor) { case 0 : operatingSystemType = OperatingSystemType.WindowsVista; break; case 1 : operatingSystemType = OperatingSystemType.Windows7; break; } } break; } return operatingSystemType; } #endregion |
■ ManagedInstallerClass 클래스의 InstallHelper 정적 메소드를 사용해 윈도우즈 서비스를 설치하거나 제거하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
using System; using System.IO; using System.Configuration.Install; #region 프로그램 실행하기 - Main(argumentArray) /// <summary> /// 프로그램 실행하기 /// </summary> /// <param name="argumentArray">인자 배열</param> private static void Main(string[] argumentArray) { if(argumentArray.Length <= 0) { Console.WriteLine("설치 : WindowsServiceInstaller.exe [filename]"); Console.WriteLine("제거 : WindowsServiceInstaller.exe [filename] /u"); } else if(!File.Exists(argumentArray[0])) { Console.WriteLine("파일을 찾을 수 없습니다."); } else if(argumentArray.Length >= 2 && argumentArray[1] == "/u") { try { // 등록된 서비스 제거 ManagedInstallerClass.InstallHelper(new string[] { "/u", argumentArray[0] }); Console.WriteLine("성공적으로 제거되었습니다."); } catch(Exception exception) { Console.WriteLine(exception.Message); } } else { try { // 서비스 등록 ManagedInstallerClass.InstallHelper(new string[] { argumentArray[0] }); Console.WriteLine("성공적으로 설치되었습니다."); } catch(Exception exception) { Console.WriteLine(exception.Message); } } Console.ReadKey(); } #endregion |
■ SystemParametersInfo WIN32 API 함수를 사용해 Form 객체를 트레이 상단에 위치시키는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
using System.Drawing; using System.Runtime.InteropServices; using System.Windows.Forms; /// <summary> /// 사각형 /// </summary> [StructLayout(LayoutKind.Sequential)] public struct RECT { /// <summary> /// 왼쪽 /// </summary> public int Left; /// <summary> /// 위쪽 /// </summary> public int Top; /// <summary> /// 오른쪽 /// </summary> public int Right; /// <summary> /// 아래쪽 /// </summary> public int Bottom; } /// <summary> /// 시스템 파라미터 정보 구하기 /// </summary> /// <param name="action">작업</param> /// <param name="parameter">파라미터</param> /// <param name="rect">사각형</param> /// <param name="winINI">WIN.INI 업데이트 플래그</param> /// <returns>처리 결과</returns> [DllImport("user32", CharSet=CharSet.Auto, SetLastError=true)] public static extern int SystemParametersInfo(int action, int parameter, out RECT rect, int winINI); /// <summary> /// SPI_GETWORKAREA /// </summary> private const int SPI_GETWORKAREA = 0x0030; #region 위치 설정하기 - SetLocation(form) /// <summary> /// 위치 설정하기 /// </summary> /// <param name="form">Form 객체</param> public void SetLocation(Form form) { RECT rect = new RECT(); SystemParametersInfo(SPI_GETWORKAREA, 0, out rect, 0); Size size = form.Size; Point location = new Point(rect.Right - form.Width, rect.Bottom - size.Height); form.Location = location; } #endregion |
■ Beep WIN32 API 함수를 사용해 비프음을 발생시키는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
using System.Runtime.InteropServices; /// <summary> /// 비프음 발생하기 /// </summary> /// <param name="frequency">주파수</param> /// <param name="duration">시간(단위 : 1/1000초)</param> [DllImport("kernel32")] public static extern void Beep(int frequency, int duration); // 도 = 256.0Hz // 레 = 도 * 9/8 = 288.0Hz // 미 = 레 * 10/9 = 320.0Hz // 파 = 미 * 16/15 = 341.3Hz // 솔 = 파 * 9/8 = 384.0Hz // 라 = 솔 * 10/9 = 426.6Hz // 시 = 라 * 9/8 = 480.0Hz // 도 = 시 * 16/15 = 512.9Hz ※ 처음 도의 2배 // 2배 = 높은음, 1/2배 = 낮은음 Beep(512, 300); // 도 0.3초 Beep(640, 300); // 미 0.3초 Beep(768, 300); // 솔 0.3초 |
■ Form 클래스의 CheckForIllegalCrossThreadCalls 정적 속성을 사용해 크로스 스레드 예외 발생을 방지하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 |
using System.Windows.Forms; Form.CheckForIllegalCrossThreadCalls = false; |
■ SqlConnection 클래스의 GetSchema 메소드를 사용해 SQL Server 데이타베이스 리스트를 가져오는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 |
using System.Data; using System.Data.SqlClient; SqlConnection sqlConnection = new SqlConnection(); ... DataTable table = sqlConnection.GetSchema("Databases"); |
■ 숫자 데이터 타입의 값을 특정 문자열 포맷으로 변환하는 방법을 보여준다. ▶ 예제 코드 (C#)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
Console.WriteLine("미사용시 : {0}"); Console.WriteLine("----------------------------------------"); Console.WriteLine("[{0}]", 1234.5678); Console.WriteLine(); Console.WriteLine("15자리 오른쪽 정렬 : {0,15}"); Console.WriteLine("----------------------------------------"); Console.WriteLine("[{0,15}]", 1234.5678); Console.WriteLine(); Console.WriteLine("15자리 왼쪽 정렬 : {0,-15}"); Console.WriteLine("----------------------------------------"); Console.WriteLine("[{0,-15}]", 1234.5678); Console.WriteLine(); Console.WriteLine("통화 형식 : {0:c2}"); Console.WriteLine("----------------------------------------"); Console.WriteLine("[{0:c2}]" , 1234.5678); Console.WriteLine(); Console.WriteLine("3자리 콤마 형식 : {0,15:n3}"); Console.WriteLine("----------------------------------------"); Console.WriteLine("[{0,15:n3}]", 1234.5678); Console.WriteLine(); Console.WriteLine("3자리 콤마 형식 : string.Format(\"{0:#,###,###.###}\");"); Console.WriteLine("----------------------------------------"); Console.WriteLine("[{0}]", string.Format("{0:#,###,###.###}", 1234.5678)); Console.WriteLine(); /* 미사용시 : {0} ---------------------------------------- [1234.5678] 15자리 오른쪽 정렬 : {0,15} ---------------------------------------- [ 1234.5678] 15자리 왼쪽 정렬 : {0,-15} ---------------------------------------- [1234.5678 ] 통화 형식 : {0:c2} ---------------------------------------- [\1,234.57] 3자리 콤마 형식 : {0,15:n3} ---------------------------------------- [ 1,234.568] 3자리 콤마 형식 : string.Format("{0:#,###,###.###}"); ---------------------------------------- [1,234.568] */ |
■ Environment 클래스의 정적 속성들을 참조해서 프로그램 환경 정보를 참조하는 방법을 보여준다. ▶ 표
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
─────────────────────────── Environment 클래스 속성 또는 메소드 설명 ─────────────────── ─────── Environment.SystemDirectory 시스템 폴더 ─────────────────── ─────── Environment.Version 닷넷 버전 ─────────────────── ─────── Environment.OSVersion 운영체제 버전 ─────────────────── ─────── Environment.MachineName 컴퓨터명 ─────────────────── ─────── Environment.UserName 사용자명 ─────────────────── ─────── Environment.CurrentDirectory 현재 폴더 ─────────────────── ─────── Environment.WorkingSet ─────────────────── ─────── Environment.ProcessorCount 프로세서 수 ─────────────────── ─────── Environment.TickCount ─────────────────── ─────── Environment.UserDomainName ─────────────────── ─────── Environmane.GetFolderPath ─────────────────── ─────── Environment.SpecialFolder.MyDocuments 내 문서 폴더 ─────────────────────────── |
■ DefaultValueAttribute 클래스를 사용해 해당 속성에 대한 디폴트 값을 설정하는 방법을 보여준다. ▶ 클래스/구조체 설정시 (C#)
1 2 3 4 5 6 7 8 9 10 |
using System.ComponentModel; [DefaultValue(typeof(Color), "Black")] public Color BrushColor { get; set; } |
▶ 열거형 설정시 (C#)
1 2 3 4 5 6 7 8 9 10 |
using System.ComponentModel; [DefaultValue(BrushType.LinearGradient)] public BrushType FillColor { get; set; } |
■ 웹 브라우저에서 로드된 HTML 문서 내 자바스크립트 함수를 호출하는 코드를 보여준다. ▶ 실행 코드 (JAVASCRIPT)
1 2 3 4 5 6 7 8 9 10 11 12 |
<script> var _value = "테스트"; function GetValue() { return _value; } </script> |
▶ 실행 코드 (C#)
1 2 3 4 5 6 7 8 9 |
using System.Windows.Forms; WebBrowser webBrowser = new WebBrowser(); string value = webBrowser.Document.InvokeScript("GetValue").ToString(); MessageBox.Show(value); |