본문 바로가기

프로그래밍/C# (WinForms)42

C#, WinForms ] 계산기 구현 STATE에 따라 버튼 이벤트가 다르게 동작해야 하기 때문에 어떻게 할까 고민하다 아래 4가지로 정의해서 구현해봄 IDLE COMPLETE_FIRST_NUMBER OPERATOR_INSERTED COMPLETE_SECONDE_NUMBER 지금 C#문법 배우는 중이고 일단 돌아가는거 보자 하고 막 만들어서 컨트롤 이름도 안바꿈.. namespace cal { public partial class Form1 : Form { enum state_t { IDLE, COMPLETE_FIRST_NUMBER, OPERATOR_INSERTED, COMPLETE_SECOND_NUMBER } state_t currentState = state_t.COMPLETE_FIRST_NUMBER; public Form1() { In.. 2023. 2. 25.
C#, WinForms ] label의 너비를 초과하는 글자 자르기 Graphics 객체를 사용해 사이즈를 구하고, 레이블 너비를 초과한 경우 Substring 메서드 사용해서 마지막 글자 지워버림 Substring 첫번째 매개변수는 추출할 문자열의 시작 인덱스, 두번째 매개변수는 추출할 문자열의 길이임. 초과되지 않게 주의 Graphics g = this.label1.CreateGraphics(); SizeF textSize = g.MeasureString(this.label1.Text, this.label1.Font); if(this.label1.Width < textSize.Width) { this.label1.Text = this.label1.Text.Substring(0, this.label1.Text.Length - 1); } 2023. 2. 25.
C# ] decimal 과 double 의 차이 C#에서 실수를 저장할 수 있는 변수로 double과 decimal이 자주 사용됨. double은 부동소수점 방식을 이용하고, decimal은 고정소수점 방식을 이용함 - double은 64비트(8바이트)크기에, 약 15~16 자리의 유효숫자를 가진다. decimal에 비해 연산이 빠르기에 대부분의 경우 사용됨. - decimal은 128비트(16바이트)크기에 28~29 자리의 유효숫자를 가진다. 정밀한 계산이 필요한 금융, 세금, 과학 등의 분야에서 사용됨. double d = 1.1 + 2.2; // d = 3.3000000000000003 decimal m = 1.1M + 2.2M; // m = 3.3 double의 경우 비교연산을 사용하면 예상 결과 나오지 않는다. 이는 double 은 이진수로 .. 2023. 2. 25.
C#, WinForms ] MessageBox 속성 private void button2_Click(object sender, EventArgs e) { MessageBox.Show("Do you want to delete?", "DELETE", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); } 2023. 2. 25.
C#, WinForms ] textBox 크기에 맞춰서 Font Size 조절하기, resize the font to fit in the texBox Graphics g = textBox1.CreateGraphics(); SizeF textSize = g.MeasureString(textBox1.Text, textBox1.Font); float scale = Math.Min(textBox1.Width / textSize.Width, textBox1.Height / textSize.Height); float fontSize = textBox1.Font.Size * scale; textBox1.Font = new Font(textBox1.Font.FontFamily, fontSize, textBox1.Font.Style); textBox 컨트롤의 Graphics object를 구함 text와 font를 매개변수로 넣고 sizeF 구조체로 너비와 높이 구함.. 2023. 2. 25.
C#, WinForms ] 천 단위로 콤마 넣기, separate Numbers with commas string.Format("{0:#,##0}", num); 사용 예시. label의 textChanged Event처리 함수 "."으로 끝나는지, 소숫점을 포함하는지, 정수인지 구분하여 처리. string의 Replace()와 Split() 메서드 사용 if(this.label1.Text.EndsWith(".")) { string numStr = this.label1.Text.Replace(",", "").Replace(".", ""); if (decimal.TryParse(numStr, out decimal num)) { string formattedStr = string.Format("{0:#,##0}", num); this.label1.Text = formattedStr + "."; } } else.. 2023. 2. 25.
C#, WinForms ] 정수인지 실수인지 확인하기, Integer / Real number 구분 Math.Floor() 함수를 사용하면된다. 내림한게 원래 값과 같으면 정수, 아니면 실수이다. double result = first + second; if(Math.Floor(result) == result) { this.label1.Text = string.Format("{0:#,##0}", result); } else { this.label1.Text = string.Format("{0:#,##0.########################}", result); } 2023. 2. 25.
C# ] 문자 또는 문자열 집합 중 하나라도 포함하고 있는지 확인하기 Contains 또는 IndexOfAny 사용 가능 Contains() 는 특정 문자열 또는 문자열 배열중 하나가 문자열 내에 존재하는 존재하는지 여부를 검사하여 bool을 반환. string str = "Hello, World!"; string[] keywords = {"World", "Universe"}; if (str.Contains(keywords[0])) { Console.WriteLine("The string contains the keyword: " + keywords[0]); } if (!str.Contains(keywords[1])) { Console.WriteLine("The string does not contain the keyword: " + keywords[1]); } Index.. 2023. 2. 25.
C#, WinForms ] 버튼 속성. 테두리색 및 굵기, 클릭시 배경색 변경하기 FlatStyle - Flat 설정 FlatAppearance - BorderColor 로 테두리색 변경 FlatAppearance - BorderSize 로 테두리 굵기 변경. 0으로 하면 테두리 없앰 FlatAppearance - MouseDownBackColor 로 클릭시 버튼 배경색 변경 FlatAppearance - MouseOverBackColor 로 마우스가 올라왔을 때 배경색 변경 2023. 2. 25.
C#, WinForms ] OpenFileDialog, 이미지 pictureBox에 로드하기 private void button1_Click(object sender, EventArgs e) { OpenFileDialog dialog = new OpenFileDialog(); dialog.Filter = "Image Files (*.bmp;*.jpg;*.jpeg;*.png)|*.BMP;*.JPG;*.JPEG,*.PNG"; dialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures); if(dialog.ShowDialog() == DialogResult.OK) { textBox1.Text = dialog.FileName; pictureBox1.SizeMode = PictureBoxSizeMode.S.. 2023. 2. 22.