본문 바로가기

C#61

Dictionary를 다른 Dictionary에 복사하는 방법 1. Constructor를 사용한 복사Dictionary originalDict = new Dictionary(){ { "One", 1 }, { "Two", 2 }, { "Three", 3 }};Dictionary copiedDict = new Dictionary(originalDict); 2. ToDictionary() 메소드를 사용한 복사using System.Linq;Dictionary originalDict = new Dictionary(){ { "One", 1 }, { "Two", 2 }, { "Three", 3 }};Dictionary copiedDict = originalDict.ToDictionary(entry => entry.Key, entry => en.. 2024. 9. 29.
File File Sizeif (!File.Exists(filePath)){ return;}FileInfo info = new FileInfo(filePath);long fileSize = info.Length; 2024. 6. 10.
Path M : Move To L : Line To C : Cubic Bezier Curve- 4개의 포인트 필요- 현재 위치가 시작점- 현재 위치(30,20) 에서 (70,20) 까지 (50,0) 과 (70,20) 의 영향을 받는(해당 포인트를 꼭 통과하지는 않음)  곡선을 그린다. Z : Close Path 2024. 5. 18.
Attribute 메타데이터를 코드에 추가하는 데 사용되는 구조체 1. Obsolete : 클래스나 메서드가 더 이상 사용되지 않고 대체될 것임을 표시class Program{ // ObsoleteMethod => Warning [Obsolete("삭제 예정. ModifiedMethod() 추천")] public static void ObsoleteMethod() { Console.WriteLine("삭제 예정 함수(경고)"); } // ObsoleteMethod => Error [Obsolete("삭제 예정. ModifiedMethod() 사용 필수", true)] public static void ObsoleteMethod() { Console.WriteLine("삭제 예.. 2024. 5. 11.
WPF 종료 모드 WPF application 이 종료되는 속성을 지정할 수 있다. App.xaml Startup="Application_Startup" 프로그램은 Shutdown 메서드 호출에 의해서만 실행이 중지됩니다. Shut down 은 ShutdownMode 속성의 지정값에 따라 암시적 또는 명시적으로 발생한다. 1. OnLastWindowClose 기본값 마지막 창을 닫거나 Shutdown()을 호출하면 애플리케이션이 종료된다. 2. OnMainWindowClose 메인 창을 닫거나 Shutdown()을 호출하면 애플리케이션이 종료된다. 3. OnExplicitShutdown Shutdown()을 호출하면 애플리케이션이 종료된다. 2024. 1. 9.
명령줄 인수 1. 프로젝트 속성 설정 WPF 프로그램 시작시 명령줄 인수 전달 프로젝트 속성 - 디버그 - 일반 - 디버그 시작 프로필 UI 열기 - 명령줄 인수 2. Source code 에서 argument 확인 string[] args = Environment.GetCommandLineArgs(); // args[0] 2023. 12. 23.
WPF ListBox drag selection 보호되어 있는 글 입니다. 2023. 11. 6.
CS0649 warning CS0649: xxx 필드에는 할당되지 않으므로 항상 기본값을 사용합니다. public struct COPYDATASTRUCT { public IntPtr pData; public int dataLength; [MarshalAs(UnmanagedType.LPStr)] public string data; } 언어 버전을 변경하지 않고 메시지만 출력되지 않도록 하기 위해 해당 필드를 #pragma 구문으로 감싼다. public struct COPYDATASTRUCT { #pragma warning disable 0649 public IntPtr pData; public int dataLength; [MarshalAs(UnmanagedType.LPStr)] public string data; #.. 2023. 9. 20.
volatile 최적화 캐싱(CPU 가 메모리에서 변수를 읽어서 레지스트리에 저장)된 변수에 대해서는 CPU 가 메모리 접근(Read)을 하지 않도록 한다. 이는 멀티태스킹 환경에서 의도하지 않은 상황을 발생시킨다. A 스레드에 캐시된 변수가 있는 상황에서 B 스레드가 해당 변수를 변경(Write) 할때 A 가 캐시된 변수의 값을 사용하면 오류 발생 A 가 정확한 값을 메모리에서 다시 읽어오는 과정이 필요하다. volatile 로 지정된 변수는 최적화를 수행하지 않는다. 필드 변수에만 적용 가능 지역 변수는 volatile 선언 불가 일부 항목에 대해서는 atomic 한 연산(read-modify-write)을 수행하지만, 모두 지원되지는 않음(다중 스레드 안전성은 Interlocked, lock 등을 사용해야 함) 2023. 9. 8.
Tray Icon ● Form 에 NotifyIcon 추가 ● notifyicon Visible : False (프로그램 시작시 초기에는 트레이 아이콘이 표시되지 않도록 한다.) Icon : 트레이 아이콘에 표시될 아이콘을 지정한다. DoubleClick 이벤트 추가 ● Form FormClosing 이벤트 추가 Resize 이벤트 추가 void ToTray() { this.Hide(); this.ShowIcon = false; notifyIcon.Visible = true; } void ToDesktop() { this.Show(); this.BringToFront(); this.ShowIcon = true; notifyIcon.Visible = false; } private void notifyIcon_DoubleCl.. 2023. 7. 15.
View 에서 디자인 타임시 ViewMode Property 자동완성 연동 MainView.xaml xmlns:vm="clr-namespace:MVVM_Sample.ViewModels" d:DataContext="{d:DesignInstance Type={x:Type vm:MainViewModel}}" 2023. 6. 11.
Button click parameter (code behind) Tag 이용 "Button_Click" 함수에 "Click_Parameter" 문자열이 전달된다. Initiate private void Button_Click(object sender, RoutedEventArgs e) { var para = ((Button)sender).Tag; // Do something with para } 2023. 6. 1.
Xaml 특수문자 특수문자 Xaml Code 설명 \n Newline \t Tab & & Ampersand > Greater-than sign (Angle Bracket) " " Quotation mark ' ' Apostrophe " " Space 2023. 6. 1.
Upcasting using System; namespace Upcasting { internal class Program { static void Main(string[] args) { Child c = new Child(); Console.WriteLine($"[ Before Upcasting ]"); Console.WriteLine($"{c.GetType()}"); Console.WriteLine($"{c.Name}"); c.Do1(); c.Do2(); Console.WriteLine($""); Parent p = (Parent)c; Console.WriteLine($"[ After Upcasting ]"); Console.WriteLine($"{p.GetType()}"); Console.WriteLine($"{p... 2023. 5. 18.
키보드 보조키 상태 확인 Shift, Alt, Ctrl Keys key; /// Shift key = Keys.Shift; if ((Control.ModifierKeys & key) == key) { Console.WriteLine("Shift key pressed"); } /// Shift key = Keys.Alt; if ((Control.ModifierKeys & key) == key) { Console.WriteLine("Alt key pressed"); } /// Ctrl key = Keys.Control; if ((Control.ModifierKeys & key) == key) { Console.WriteLine("Ctrl key pressed"); } 2023. 1. 30.
System.Windows.Data Error: 17 View(xaml) 컨트롤과 binding 된 변수가 할당되지 않는 경우 발생 1. Dialog ViewMode 생성자에서 아래와 같이 컬렉션을 생성 ObservableCollection Peoples = ObservableCollection(); 2. 다이얼로그 Open 시 컬렉션에 데이터를 할당하지만 Peoples = para.GetValue("PeopleInfoList"); 3. 다이얼로그 생성시 System.Windows.Data Error: 17 에러 발생 4. 위의 1번 과정에서 컬렉션에 기본 데이터 추가 후 에러 해결됨 ObservableCollection Peoples = ObservableCollection(); for (int i = 0; i < PeopleCount; i++) { Pe.. 2022. 11. 1.
CS0227 unsafe 옵션을 사용하여 컴파일 하는 경우 CS0227 오류 발생 프로젝트 - 속성 - 빌드 - "안전하지 않은 코드 허용" 체크 2022. 10. 23.
Close Window in ViewModel MVVM 패턴에서 ViewModel 이 Window 를 직접 접근하는 것은 권장하지 않는다. 방법 1. Application.Current.MainWindow.Close() 방법 2. ViewModel Code public class ViewModel { public Action CloseAction { get; set; } private void CloseCommandFunction() { CloseAction(); } } View Code(XAML) public partial class DialogWindow : Window { public DialogWindow() { ViewModel vm = new ViewModel(); this.DataContext = vm; vm.CloseAction = n.. 2022. 10. 23.
Trigger Trigger 는 setter property 가 특정 조건에 의해 변경되었을때와 같은 특정 행동의 반응이다. Trigger 는 style 의 한 부분으로 적용되며, 스타일에서 setter 의 property 는 정적인 반면, trigger 의 property 는 조건에 따라 변경된다. Trigger 의 조건이 false 일때, trigger 안에서 설정한 값들은 기본값으로 돌아간다. Trigger 는 control 의 외형이나 animation 의 동적 변경등에 사용된다. Trigger 는 내부적으로 Dependency Properties 개념을 사용한다. 2022. 10. 23.
Tuple (함수 반환값 여러개 사용하기) 여러개 반환값을 사용하는 함수 public Tuple ShowInputInteger(string title, int min, int max, int value) { bool retFlag; int retValue; if (true) { retFlag = true; retValue = 1; } else { retFlag = false; retValue = 0; } return (new Tuple(ret, dlgValue)); } 여러개 반환값을 받아 사용 var ret = ShowInputInteger("Test", 0, 9999, 30); if (ret.Item1) { MessageBox.Show($"return value is {ret.Item2}"); } 2022. 10. 9.