왜 안되는지 확인 필요
·
카테고리 없음
private void MainGrid_CellDoubleClick(object sender, DataGridViewCellEventArgs e) { try { DataGridViewRow row = MainGrid.Rows[e.RowIndex]; Console.WriteLine($"row: {row}"); Console.WriteLine($"e.RowIndex: {e.RowIndex}"); string name = row.Cells[e.RowIndex].Value.ToString(); DetailF..
과제2
·
카테고리 없음
과제 요구사항 분석
·
C#
[ 학생 자동추가 및 수정 프로그램 ] 1. Student Class 에서 값이 매 10초마다 추가되고, 바뀔 때 마다 주기적으로 View에 Data 전달 전달할 Data 형식은 DataTable 2. Data 전달 후 표기 할 UI - DataGridViewex) Header - Name, Age, Major 홍길동, 24, 도둑3. 특정 Cell을 클릭 할 시, Student에 대한 정보를 불러와서신규 Form 객체를 띄워서(Show) 데이터를 표기ex) 이름 : [Name] 나이 : [Age] 직업 : [Major] 4. 신규 Form객체에서 이름,나이, 직업 등을 수정 후 저장 시, 2번 DataGridView에서 데이터 갱신ex) 홍길동,..
이벤트 핸들러 학습 후 응용한 예제
·
C#
이벤트 핸들러 학습 예제
·
C#
// Create.cspublic Action TempAction; string recivedData = "사과";public void TriggerAction(){ TempAction?.Invoke(recivedData);}// Form1.csprivate Create create = new Create();public Form1(){ InitializeComponent(); create.TempAction += ReadData;}private void button2_Click(object sender, EventArgs e){ create.TriggerAction();}private void ReadData(string obj){ MessageBox.Show($"Actio..
·
카테고리 없음
학생조회프로그램 - 외부클래스 분리버전
·
C#
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using System.IO; // 파일스트림namespace StudentApp{ public partial class Form1 : Form { // 필드 private List students = new List(); // 학생 리스트 (이것도 어디엔가 분리돼야함) private IniFil..
"이벤트 핸들러"를 사용한 "인자 전달"
·
C#
**“인자를 이벤트 핸들러를 사용해서 넘겨라”**는 말은지금처럼 메서드 매개변수로 직접 name, age, major 등을 넘기는 대신,이벤트 기반으로 객체 간 데이터를 전달하라는 뜻이에요.👉 즉, “버튼이 클릭되면 데이터를 직접 넘기지 말고,그 클릭에 반응하는 다른 클래스가 이벤트를 ‘구독(subscribe)’해서데이터를 전달받도록 구조를 바꿔라” 는 의미예요.🚦 현재 코드의 구조 (직접 호출 방식)Student student1 = create.CreateStudent(name, age, major);listManage.AddStudent(students, student1);👉 Form1이 create와 listManage를 직접 호출👉 Form1이 모든 데이터 흐름을 제어 (즉, tightly..
인스턴스
·
C#
// MyClass 라는 이름의 클래스 정의public class MyClass{ public int Value { get; set; } // 인스턴스 멤버 변수 (프로퍼티) // 생성자 (선택 사항) public MyClass(int value) { Value = value; } public void DisplayValue() { Console.WriteLine($"The value is: {Value}"); }}// 여러 인스턴스 생성 및 사용class Program{ static void Main(string[] args) { // 첫 번째 인스턴스 생성 MyClass instance1 = new..
학생 추가 기능 분리
·
C#
// 객체 생성 Student student1 = create.CreateStudent(name, age, major); // 생성한 객체를 [학생 리스트]에 추가 students.Add(student1); // 생성한 객체를 [UI-Listbox]에 추가 listStudents.Items.Add(student1.Name); create 라는 외부 클래스에서 객체를 생성한 뒤 넘겨 받았다.넘겨받은 객체를 List에도 추가해야하고, UI에도 추가해야한다. 하지만 유저 인터페이스는 가급적 UI만 건드리는 일을 하는게 좋고,나머지 연산 등의 기능은 외부 클래스로 분리하..
학생 조회 프로그램 - class 버전
·
C#
필드(Field) vs 속성(Property)
·
C#
public string filePath = "students.ini";🔹 필드(Field)클래스 내부에서 데이터를 직접 저장하는 공간외부에서 접근할 때 직접 읽고 쓸 수 있음지금 코드에서 public string filePath가 바로 필드문제점:외부에서 바로 수정 가능 (iniFile.filePath = "abc.ini";)나중에 값을 검증하거나, 변경될 때 동작을 넣기 어렵습니다.-public string FilePath { get; set; } = "students.ini";🔹 속성(Property)읽기/쓰기 방법을 캡슐화해서 관리값 변경 시 검증, 로그, 이벤트 등 추가 가능C#에서는 get과 set으로 구현 get : 값을 가져올 때 호출set : 값을 변경할 때 호출 💡 정리필드는 단..
namespace와 using구문
·
C#
using 구문은 파일, 네트워크, 데이터베이스 연결 등 “외부 자원”을 자동으로 정리(dispose) 하기 위한 문법즉, using은 “이 코드 블록이 끝나면 자동으로 닫아줘!” 라는 의미// 비추천 ❌StreamWriter writer = new StreamWriter(filePath);writer.WriteLine("Hello");writer.Close();// 추천 ✅using (StreamWriter writer = new StreamWriter(filePath)){ writer.WriteLine("Hello");} // 여기서 자동으로 Dispose() → Close() 호출됨 ❌ Close() 직접 호출예외 시 자원 누수 가능✅ using 사용자동으로 안전하게 닫힘
필드(전역)변수와 내부(지역)변수
·
C#
namespace StudentApp{ internal class iniFile { // 필드 public string filePath = "students.ini"; // 이것도 지정하면 좋을것같은데 // 메서드 public void writeFile(List students) { try { StreamWriter writer = new StreamWriter(filePath); foreach (var student in students) { writer.WriteLine($"[..
static void Main(string[] args) 의 의미
·
C#
static void Main(string[] args)는 C# 프로그램의 시작점을 나타내는 함수입니다. static은 객체 생성 없이 함수를 호출할 수 있게 하고, void는 함수가 값을 반환하지 않음을 의미하며, Main은 프로그램의 진입점임을 나타냅니다. string[] args는 프로그램 실행 시 전달되는 명령줄 인수들을 담는 문자열 배열입니다.
static이 아닌 필드, 메서드 또는 속성에 개체 참조가 필요합니다.
·
C#
이 오류는 인스턴스 멤버(non-static member)를 인스턴스(객체) 없이 직접 호출하려고 할 때 발생 Non-static (인스턴스) 메서드/필드: 특정 객체 인스턴스에 속하며, 해당 객체의 데이터를 사용하여 작동합니다. 사용하기 전에 반드시 클래스의 인스턴스를 생성해야 합니다.Static (정적) 메서드/필드: 클래스 자체에 속하며, 객체 생성 없이 클래스 이름으로 직접 호출할 수 있습니다. 정적 메서드는 인스턴스 데이터를 참조할 수 없습니다. >> 메서드가 static으로 선언되지 않았기 때문에컴파일러는 이 메서드를 호출할 때 어떤 특정 writeFile 객체에 대해 실행해야 할지 알 수 없어 오류를 발생 namespace StudentApp{ internal class writeFi..
학생 조회 프로그램 - origin 코드
·
C#
서비스 로직 분리 전 코드using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using System.IO; // 파일스트림namespace StudentApp{ public partial class Form1 : Form { private List students = new List(); // 학생 리스트 public Form1() { ..
학생 조회 프로그램 - 함수 설명 (기능명세서)
·
C#
함수명기능private void btnCreate_Click(object sender, EventArgs e)학생 생성 함수private void btnSave_Click(object sender, EventArgs e)파일 저장 함수private void listStudents_MouseDoubleClick(object sender, MouseEventArgs e) 상세정보 조회 함수클래스에 있는 메서드를 사용private void btnOpen_Click(object sender, EventArgs e) 파일 열기 함수private void parseIniFile(StreamReader reader) 파싱 함수매개 인자: StreamReaderprivate void btnClear_Click(obje..
학생 조회 프로그램
·
C#
Student.csusing System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace StudentApp{ internal class Student { // 속성 public string Name { get; set; } public int Age { get; set; } public string Major { get; set; } // 생성자 public Student(string name, int age, string major) { Na..
예외종류 :: 구체적인 예외로 어떤 오류인지 확인하기
·
C#
이름 / 의미 / 상황FormatException형식이 맞지 않는 경우"abc"를 int.Parse()로 변환할 때ArgumentException잘못된 인자가 전달됨메서드에 잘못된 값 전달ArgumentNullExceptionnull이 전달됨null을 허용하지 않는 메서드에 null 전달ArgumentOutOfRangeException범위를 벗어난 값 전달리스트 인덱스가 0~9인데 10을 접근IndexOutOfRangeException배열/리스트 인덱스 범위 초과배열 길이보다 큰 인덱스 접근NullReferenceExceptionnull 참조 시null 객체의 메서드 호출InvalidOperationException잘못된 상태에서 메서드 호출이미 종료된 스트림에 쓰기 시도DivideByZeroExcept..