C# - 메뉴, 대화상자, 타이머, 그래픽

Claire·2024년 10월 31일

메뉴

: 응용 프로그램에서 사용자와의 인터페이스로 많이 사용되는 컨트롤

속성 및 메소드

  1. 메뉴 스트립
속성 및 메소드내용
ContextMenuStripContextMenuStrip이 선택되어 있는지 여부를 나타내거나 설정
Enabled컨트롤 사용 여부를 설정
ItemsMenuStrip에 등록된 모든 항목을 가져옴
GetItemAt()지정한 위치에 있는 항목을 반환
  1. 툴바
속성 및 메소드내용
CheckedToolStripMenuItem이 선택되어 있는지 여부를 나타내거나 설정
Enabled컨트롤 사용 여부를 설정
ShortCutKeysToolStripMenuItem과 연결된 바로 가기 키를 가져오거나 설정
Visible항목이 표시되는지 여부를 나타내는 값을 가져오거나 설정

대화상자

대화상자와 모달 대화상자

  • 대화상자란?
    : 대화를 위한 상자로, 파일을 불러올 때, 폰트를 설정할 때, 오류 메세지나 경고 메세지 등을 보여주는 상자
  • 모달 대화상자
    : 수행이 동기적으로 처리해야하는 경우 모달 대화상자를 사용하며, 메인 폼에 종속된 대화상자이다. 따라서, 대화 상자가 닫히기전까지 부모로 포커스 이동이 불가하다.

공통 대화상자

: 운영체제 기반에서 공통으로 제공되는 대화상자로, 파일 열기/저장 대화상자, 폰트 설정 대화상자, 색상 설정 대화상자 등이 있다.

  1. 파일 열기 및 저장 대화상자
    : openFileDialog와 SaveFileDialog 클래스에서 제공하는 기능
  • 주요 속성 및 메소드

    속성 및 메소드내용
    AddExtension확장명을 생략한 경우 대화상자가 파일 이름에 확장명을 자동으로 추가할지 여부를 설정
    CheckFileExists존재하지 않는 파일 이름을 지정할 때 대화상자에 경고가 표시되는지 여부를 설정
    CheckPathExists존재하지 않는 경로를 지정할 때 대화상자에 경고가 표시되는지 여부를 설정
    DefaultExt기본 확장명 설정
    FileName파일 대화상자에서 선택한 파일 이름을 포함하는 문자열 설정
    FileNames대화상자에서 선택한 모든 파일의 파일 이름을 가져옴
    Filter대화상자에서 "파일 형식"에 표시되는 문자열을 필터로 설정
    InitialDirectory대화상자가 표시하는 초기 디렉토리 설정
    Title대화상자이 제목 설정
    Reset()모든 속성을 기본값으로 다시 설정
    ShowDialog()모달 대화상자로 실행
  1. 폰트 대화상자
    : 폰트 설정 기능으로 FontDialog 클래스에서 제공
  • 주요 속성 및 메소드

    속성 및 메소드내용
    Color선택한 글꼴 색을 가져오거나 설정
    Font선택한 글꼴을 가져오거나 설정
    ShowEffects취소선, 밑줄 및 텍스트 옵션을 지정하는데 사용할 수 있는 기능 설정
    Reset()모든 속성을 기본값으로 다시 설정
    ShowDialog()모달 대화사장로 실행
  1. 색상 대화상자
    : 색상 설정 기능으로 ColorDialog 클래스에서 제공
  • 주소 속성 및 메소드
    속성 및 메소드내용
    AnyColor대화상자에서 기본 색 집합에 있는 색 중 사용가능한 색이 모두 표시되는지 여부를 설정
    Color선택한 색을 가져오거나 설정
    CustomColor사용자 지정 색 집합을 가져오거나 설정
    Reset()모든 속성을 기본값으로 다시 설정
    ShowDialog()모달 대화사장로 실행

대화상자 예시 코드

// 버튼을 이용하여 파일 열기/저장/글꼴 및 색상 변경하기
namespace 공통대화상자
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnOpen_Click(object sender, EventArgs e)
        {
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = "Open " + ofd.FileName;
            }
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            sfd.Filter = "모든 파일(*.*)|(*.*)";
            if(sfd.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = "Save " + sfd.FileName;
            }
        }

        private void btnFont_Click(object sender, EventArgs e)
        {
            if(fd.ShowDialog() == DialogResult.OK)
            {
                textBox1.Font = fd.Font;
            }
        }

        private void btnColour_Click(object sender, EventArgs e)
        {
            if (cd.ShowDialog() == DialogResult.OK)
            {
                textBox1.ForeColor = cd.Color;
            }
        }
    }
}

타이머

: 어떤 일정 주기로 반복해야하는 기능을 타이머라고 하며, 종료는 3가지 클래스 라이브러리가 존재한다.
일반적으로 사용하는 타이머는 System.Windows.Forms.Timer이다.

타이머 클래스내용
System.Windows.Forms.Timer사용자가 정의한 간격마다 이벤트를 발생시키는 타이머를 구현 (이 타이머는 Windows.Forms 응용 프로그램에서 사용할 수 있도록 최적화)
System.Threading.Timer지정된 간격으로 메소드를 실행하는 메커니즘으로 제공
System.Timers.Timer응용프로그램에 주기적인 이벤트 생성

타이머 예시 코드

// 타이머를 이용해서 메세지 창 띄우기
public partial class Form1 : Form
{
    private int x;
    private int y;
    private int h = 0;
    private MsgForm msg;

    public Form1()
    {
        InitializeComponent();
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        if (h  > 193)
        {
            h = 0;
            timer1.Stop();
            Thread.Sleep(3000);
            msg.Close();
        } else
        {
            msg.Location = new Point(x, y - h);
            msg.Show();
            h = h + 10;
        }
    }

    private void btnMsg_Click(object sender, EventArgs e)
    {
        x = Screen.PrimaryScreen.Bounds.Width - 244;
        y = Screen.PrimaryScreen.Bounds.Height;
        msg = new MsgForm();
        timer1.Start();

    }
}

그래픽(Graphic Device Interface)

GDI와 GDI+

GDI

GDI(Graphical Device Interface): 그래픽 디바이스에 독립적으로 기능을 제공해주는 인터페이스

GDI란 운영체제에서 그래픽 출력을 위해 그래픽 디바이스 드라이버를 제어해야 하는데 각 벤더사에서 제공하는 디바이스 드라이버가 각각 다르기 때문에 독립적으로 해당 기능을 제어하는 프로그램이 필요해지며 만들어진 것이 GDI이다. GDI는 위도우 운영체제에서 gdi.dll형태로 제공된다.

GDI+

GDI+는 기존 GDI를 확장한 버전으로 GDI는 C언어 기반이었으나 GDI+는 객체지향 클래스의 집합으로 래핑한 형태

GDI+의 특징

  1. 화면에 모든 그래픽 출력은 Graphics 객체를 통해서 가능하다
  2. 도형을 그리는 메소드들이 오버룅 형태로 다양하게 제공된다.
  3. 펜, 브러시 등의 리소스 객체를 생성 후 별도로 해제할 필요가 없다. 가비지 컬렉터가 뒷정리를 해주기 때문이다.
  4. 그라데이션 브러시, 알파값 처리, 텍스트 안티 알리아싱 등과 같은 그래픽 처리 관련 기능들이 추가됨

⇨ GDI와 GDI+는 따로 존재하며, GDI+는 gdiplus.dll의 형태로 존재한다.

펜과 브러시

펜: 선을 나타낼 때 사용하는 그래픽 객체

public Pen(Color, color, float width);

// 펜 객체 생성
Pen p = new Pen(ColorRed, 5);

브러시: 도형의 면을 채울 때 사용하는 그래픽 객체

브러시의 종류에는 단색 브러시, 해치 브러시, 그라디언트 브러시, 텍스쳐 브러시 등이 존재한다.

브러시 종류설명
SolidBrush단색 브러시로 도형 내부를 단색으로 채운다
HatchBrush해치 브러시로 미리 설정된 다양한 패턴으로 채운다
LinearGradientBrush그라디언트 브러시로 두 가지의 색상을 그라데이션으로 표현한다
PathGradientBrush그라디언트 브러시로 개발자가 정의한 고유 경로에 따라 혼합된 색의 그라데이션을 사용하여 그린다
TextureBrush이미지와 같은 질감을 사용하여 그린다

단색 브러시는 일반적인 브러시 형태로, 채울 색상을 인수로 전달한다.

public SolidBrush(Color color);

// 브러시 생성 코드
SolidBrush b = new SolidBrush(ColorBlue);
g.FillRectangle(b, 10, 10, 100, 100);
g.FillRectangle(Brushes.Red, 130, 10, 100, 100);

Graphics 클래스
: 기본적인 도형을 그리기 위한 API 제공

주요 메소드

메소드설명
DrawArc좌표, 너비, 높이의 쌍으로 지정된 타원의 부분을 나타내는 '호'를 그림
DrawBezier네 개의 Point 구조체로 정의되는 3차원 곡선 스플라인을 그림
CrawCurvePoint 구조체의 지정된 배열을 따라 카디널 스플라인을 그림
DrawEllipse좌표, 높이, 너비의 쌍으로 지정된 경계 사각형에 의해 정의되는 타원을 그림
DrawIcon지정된 아이콘에 의해 나타나는 이미지를 지정된 좌표에 그림
DrawImage지정된 이미지를 지정된 위치에 그림
DrawLine좌표에 의해 지정된 두 개의 점을 연결하는 선을 그림
DrawPie좌표, 너비, 높이 및 두 개의 방사형 선에 의해 지정된 타원으로 정의된 부채꼴 모양을 그림
DrawPolygonPoint 구조체의 배열에 의해 정의된 다각형을 그림
DrawRectangle좌표, 너비, 높이에 의해 지정된 사각형을 그림
DrawString지정된 위치에 Brush와 Font 객체로 지정된 텍스트 문자열을 그림
FillEllipse좌표, 너비, 높이에 의해 지정된 사각형 내부에 내접하는 원을 채움
FillRectangle좌표, 너비, 높이에 의해 지정된 사각형의 내부를 채움
FillRegionRegion의 내부를 채움
RotateTransform지정된 각도만큼 기하학적 변환을 수행

도형

  1. 사각형 그리기
  • Rectangle 클래스 사용
Recangle(x, y, width, height);

// 사각형 그리기
public void DrawRectangle(Pen pen, Rectangle rect);

// 면채우는 사각형 그리기
public void FillRectangle(Brush brush, Rectangle rect);
  1. 원그리기
  • Rectangle 클래스 사용
Recangle(x, y, width, height);

// 원그리기
public void DrawEllipse(Pen pen, Rectangle rect);

// 면을 채우는 원그리기
public void RillEllipse(Bursh brush, Rectangle rect);
profile
SEO 최적화 마크업 개발자입니다.

0개의 댓글