C#28 C#, WinForms ] 자식 폼에서 부모 폼으로 데이터 전달 방법, 이벤트 / 프로퍼티 자식폼에서 dataGridView의 selectedIndex 전달 받기 1. 이벤트 활용 방법 자식폼 public partial class DeviceListForm : Form { // ... public event EventHandler OnItemSelected; // OK 버튼 클릭 시 private void buttonOk_Click(object sender, EventArgs e) { if(deviceList.SelectedIndex != -1) { OnItemSelected?.Invoke(this, deviceList.SelectedIndex); } } // ListBox 더블클릭 시 private void deviceList_MouseDoubleClick(object sender, Mous.. 2023. 5. 14. WinForms ] Anchor, Dock properties Anchor 속성의 default 값은 Top, Left인데 이 값을 변경하면 bold 체로 바뀐다. Anchor 속성 미사용시 Anchor 속성 사용 Dock 속성 default 값은 None이다. toolStrip은 top에 dock하고 statusStrip은 bottom에 dock할 수 있다. 여러 컨트롤을 같은 방향에 dock할 수 있고 어떤걸 먼저 dock하느냐에 따라 화면에 표시되는게 달라진다. textBox의 multiLine 속성을 true로하고 dock 속성을 fill로 하면 마치 메모장같은 GUI를 볼 수 있다. splitContainer를 먼저 만들고 그 안에서 컨트롤을 dock하는 것도 가능하다. 2023. 5. 14. C#, WinForms ] Event 와 delegate C#에서 이벤트를 사용하면 프로그램의 느슨한 결합(loose coupling)을 통해 객체 간 상호작용을 구현할 수 있다. 이벤트는 객체가 발생시키는 특정한 동작을 나타내며, 이벤트를 구독하는 다른 객체는 해당 이벤트를 수신하고 이벤트 처리기를 호출한다. 이를 통해 클래스 내부에서 발생한 동작을 외부에서 알림으로써 더욱 유연하고 효율적인 프로그래밍을 구현할 수 있다. 이벤트를 발생시키는 쪽이 Publisher이고 이벤트를 수신하고 처리하는 쪽이 Subscriber가 된다. 1. delegate 정의 및 이벤트 선언하기 Publisher 쪽에서 메서드를 참조하는 형식인 delegate를 사용하여 이벤트를 선언하면 된다. 직접 delegate 정의를 할 수도 있고 system namespace에 이미 정의된.. 2023. 5. 14. C#, WinForms ] CRC Checker private void button1_Click(object sender, EventArgs e) { // 초기 디렉토리 설정 openFileDialog1.InitialDirectory = "C:\\"; // 파일 필터 설정 openFileDialog1.Filter = "모든 파일 (*.*)|*.*|텍스트 파일 (*.txt)|*.txt|바이너리 파일 (*.bin)|*.bin|데이터 파일 (*.dat)|*.dat"; // 마지막으로 파일 대화 상자에서 선택한 디렉토리를 기억하고, 다음번 파일 대화 상자를 열 때에는 이전에 선택한 디렉토리를 자동으로 선택 openFileDialog1.RestoreDirectory = true; if (openFileDialog1.ShowDialog() == DialogRes.. 2023. 5. 14. C#, WinForms ] Drag & Drop 으로 파일 경로 얻기 파일 시스템에 액세스하기위해 using System.IO; 선언 Form의 AllowDrop 속성 true 일반적으로 Form이나 Control에는 파일을 Drop할 수 없기 때문에, 해당 Form이나 Control에 AllowDrop 속성을 true로 설정해주어야 한다. this.AllowDrop = true; DragEnter, DragDrop 이벤트 핸들러 추가 this.DragDrop += new System.Windows.Forms.DragEventHandler(this.Form1_DragDrop); this.DragEnter += new System.Windows.Forms.DragEventHandler(this.Form1_DragEnter); DragEnter 이벤트 : 사용자가 무언인가를 .. 2023. 5. 14. C# ] delegate C#의 delegate는 메서드를 참조하는 객체로 C/C++의 함수포인터와 비슷한 개념이다. C#의 메서드포인터라고 보면 된다. 이 Delegate는 이벤트 핸들러나 콜백 함수를 구현하거나, 대리자 메서드를 호출하는 등 용도로 사용할 수 있다. using System; namespace ConsoleApp2 { class Program { static void Main(string[] args) { MyClass mc = new MyClass(); mc.Perform(); } } class MyClass { // 1. delegate 선언 private delegate void printInt2Consol(int i); public void Perform() { // 2. delegate 인스턴스 생성... 2023. 5. 14. C#, WinForms ] program.cs C# 프로그램 진입점 using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; namespace Appname1 { internal static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } } using 문을 .. 2023. 5. 14. C# ] namespace 네임스페이스(namespace)는 C#에서 클래스, 구조체, 인터페이스 등을 그룹화하는 데 사용되며, 각 그룹에 대한 유일한 식별자 역할을 한다. 네임스페이스를 사용하면 다른 네임스페이스에선 동일한 이름의 클래스 등을 정의할 수 있어 클래스 이름이나 함수 이름 등이 충돌하는 것을 방지할 수 있으며, 클래스나 함수 등을 논리적으로 그룹화하여 코드의 가독성을 높일 수 있다. C#에서는 기본적으로 System이라는 네임스페이스가 제공되는데 이 네임스페이스에는 C#에서 기본으로 제공되는 클래스들이 포함되어 있다. 또한, 사용자가 직접 네임스페이스를 정의하여 사용할 수 있다. namespace MyNamespace { // 클래스, 구조체, 인터페이스 등의 정의 } 같은 네임스페이스 안에 있는 클래스들은 서로를 .. 2023. 5. 14. C# ] NuGet 패키지 관리자 사용하여 프로젝트에 패키지 추가 C#에서 라이브러리를 추가하는 방법은 크게 두 가지가 있다. 1. NuGet 패키지 관리자를 사용하는 방법 : NuGet은 오픈 소스 라이브러리 패키지 관리 도구로, 이걸 사용하면 Visual Studio에서 간편하게 패키지를 검색하고 설치할 수 있다. NuGet을 통해 패키지를 설치하면 해당 패키지가 포함하는 라이브러리 파일들이 프로젝트에 자동으로 추가된다. 2. 프로젝트 참조를 사용하는 방법 : 프로젝트 참조를 사용하는 방법에는 두 가지가 있다. 2-1. DLL 추가 : DLL을 추가하는 방법은 프로젝트에서 외부 라이브러리를 사용하려는 경우에 사용된다. 추가할 DLL 파일을 프로젝트의 참조에 추가하면 해당 DLL에 있는 모든 클래스, 인터페이스, 메서드 등을 사용할 수 있다. - 프로젝트를 우클릭하고.. 2023. 5. 14. WinForms ] 콘솔창 출력 솔루션 우클릭 Properties - Application 탭 - Output type : Console Application 선택 이제 Console.WriteLine();으로 출력할 수 있다. 2023. 5. 14. 이전 1 2 3 다음