본문으로 바로가기

C# Winform 강의 4일차

category C# Winform 2020. 6. 18. 11:50

안녕하세요~! 문쑹입니다 :) 오늘부터는 예제를 많이 다뤄서 프로그램을 만들어 볼 수 있게 해보겠습니다.

 

Chart 컨트롤 사용하기

위와 같은 화면처럼 도구상자에서 차트와 버튼을 각각 하나씩 만들어 주세요.

 

차트의 속성에서 Series의 컬렉션 설정에 들어가줍니다.

Series 컬렉션 편집기에서 이름을 Score로 변경해주세요!

namespace ChartControlApp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.Text = "Using Chart Control";
            // 10명의 학생 랜덤점수 생성 및 차트 바인딩
            Random r = new Random();
            chart1.Titles.Add("중간고사 성적");
            for(int i=0; i<10; i++)
            {
                int val = r.Next(10, 100);
                chart1.Series["Score"].Points.Add(val) ;
                //chart1.Series["Score"].ToolTip = val.ToString();
            }
            chart1.Series["Score"].LegendText = "수학점수";
            chart1.Series["Score"].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
            chart1.Series["Score"].ToolTip = "테스트";
        }

        private void button1_Click(object sender, EventArgs e)
        {
            chart1.Series["Score"].Points.Clear();
            MessageBox.Show("데이터를 지웠습니다.", "처리",
                MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
    }
}

 

디자인을 좀더 꾸며보는 툴을 설치해보겠습니다.

 

만든 프로젝트 아래 "참조"에서 NuGet 패키지 관리를 실행시켜주세요.

 

찾아보기를 클릭해주세요 그리고 검색창에 MetroUI라고 검색해주세요.

위와 같은 그림의 프로그램을 설치해주세요! 버전은 각자의 컴퓨터에 맞게 설치해주시면 됩니다.

꼭 자신이 설치할려는 프로젝트가 맞는지 확인하세요!

3가지가 추가되었는걸 확인할 수 있습니다.

 

아래의 코드처럼 Form을 MetroFramework.Forms.MetroForm 변경해주세요 

public partial class Form1 : MetroFramework.Forms.MetroForm

 

MetroUI

Clear 버튼도 변경해보겠습니다.

        private void button1_Click(object sender, EventArgs e)
        {
            chart1.Series["Score"].Points.Clear();
            MetroMessageBox.Show(this,"데이터를 지웠습니다.", "처리",
                MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

MessageBox를 MetroMessageBox로 코드를 변경하여 버튼 Clear를 하였을 때도 UI변경을 주었습니다. 혹시나 빨간줄이 그여있거나 그러면 Alt+Enter를 눌려서 Usingusing MetroFramework를 추가해주세요!

 

이번에는 책대여 시스템 예제를 살펴보겠습니다.

우선 SSMS(SQL Server)를 실행해주세요.

USE bookrentalshopDB
GO

CREATE TABLE userTbl (
	id int IDENTITY(1,1) NOT NULL PRIMARY KEY,
	userID varchar(12) NOT NULL,
	password varchar(max) NOT NULL,
	lastLoginDt datetime NULL,
	loginIpAddr varchar(30) NULL
)
GO

그리고 위의 코드를 실행 시켜주세요! DB가 없다면 새로운 DB를 생성해주신 다음 테이블을 생성해주세요.

 

다음 userTbl로 가서 행 편집을 해주세요

userID = admin / password = 12345 로 설정해주시고 다시 Visual Studio로 이동해주세요

 

BookRentalShop20이란 이름으로 새 프로젝트 하나 생성 해줍시다.

그리고 아까 위에서 설치했던 Nuget을 프로젝트에 설치해주세요! Nuget은 프로젝트마다 설치를 해줘야하기 때문에 BookRentalShop20 프로젝트 - 참조 - MetroUI를 검색하고 위에서 언급했던 설치방법과 동일하게 진행해주세요!

 

True로 변경해주세요 form안에 form을 작성가능하게 해줍니다.

 

위의 그림들과 같이 설정해주세요.

ID와 Password의 속성을 변경해주세요

 

서버 탐색기 - 데이터 연결 - 추가를 해주세요

위와 같이 데이터베이스를 연결한 다음

다시 속성창에서 연결 문자열을 전부 복사해주세요.

 

using MetroFramework.Forms;
using System;
using System.Windows.Forms;

namespace BookRentalShop20
{
    public partial class LoginForm : MetroForm
    {
    	//DB연결시 필수 작업
        string strConnString = "Data Source=127.0.0.1;Initial Catalog=BookRentalshopDB;Persist Security Info=True;User ID=sa;Password=p@ssw0rd!";
        public LoginForm()
        {
            InitializeComponent();
        }
        /// <summary>
        /// Cancle 버튼 클릭 이벤트
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>


        private void BtnCancle_Click(object sender, EventArgs e)
        {
            //Application.Exit();
            Environment.Exit(0); // Environment에서 0은 트루, 1은 에러. C#에서 선호 함

        }
        /// <summary>
        /// 로그인 처리 버튼 이벤트
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnOk_Click(object sender, EventArgs e)
        {
            LoginProcess();
        }

        private void TxtUserID_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)13) // 엔터
            {
                TxtPassword.Focus();
            }
         }

        private void TxtPassword_KeyPress(object sender, KeyPressEventArgs e)
        {
            if(e.KeyChar == (char)13) 
            {
                LoginProcess();
            }
        }

        private void LoginProcess()
        {
            throw new NotImplementedException();
        }
    }
}

strConnString 부분에서 패스워드가 *******모양으로 되잇을 텐데 지우고 여러분의 비밀번호를 입력해주세요!

이 작업은 정확한 IP주소,아이디, 패스워드만 있다면 언제든지 연결이 가능합니다!

 

로그인창 실행화면
로그인 성공했을 때 화면
아무것도 입력하지 않고 확인을 눌렀을 때

using MetroFramework;
using MetroFramework.Forms;
using System;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Windows.Forms;

namespace BookRentalShop20
{
    public partial class LoginForm : MetroForm
    {
        string strConnString = "Data Source=127.0.0.1;Initial Catalog=BookRentalshopDB;Persist Security Info=True;User ID=sa;Password=p@ssw0rd!";
        public LoginForm()
        {
            InitializeComponent();
        }
        /// <summary>
        /// Cancle 버튼 클릭 이벤트
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>


        private void BtnCancle_Click(object sender, EventArgs e)
        {
            //Application.Exit();
            Environment.Exit(0); // Environment에서 0은 트루, 1은 에러. C#에서 선호 함

        }
        /// <summary>
        /// 로그인 처리 버튼 이벤트
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void BtnOk_Click(object sender, EventArgs e)
        {
            LoginProcess();
        }

        private void TxtUserID_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == (char)13) // 엔터
            {
                TxtPassword.Focus();
            }
         }
        private void TxtPassword_KeyPress(object sender, KeyPressEventArgs e)
        {
            if(e.KeyChar == (char)13) 
            {
                LoginProcess();
            }
        }
        private void LoginProcess()
        {
            //throw new NotImplementedException();
            if ( string.IsNullOrEmpty(TxtUserID.Text)|| string.IsNullOrEmpty(TxtPassword.Text))
            {
                MetroMessageBox.Show(this, "아이디 / 패스워드를 입력하세요!", "오류",
                    MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            string strUserId = string.Empty;

            //DB연결, SQL 인젝션 해킹을 방지하기 위해서 아래와 같이 복잡하게 사용
            using (SqlConnection conn = new SqlConnection(strConnString))
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand();  //Sql 명령문을 입력 받는 타입
                cmd.Connection = conn;
                cmd.CommandText = "select userID from userTbl" +    //쿼리문을 넣을 때 마지막 또는 처음에 꼭! 스페이스 넣어줘야함!
                                    " Where userId = @userID" +   //'admin' 과 @userID가 동일
                                    " And Password = @password";   //'12345' 과 @password가 동일

                //ID 설정
                SqlParameter parmUserId = new SqlParameter("@userID", System.Data.SqlDbType.VarChar, 12);//id속성 글자수를 12로 지정했음
                parmUserId.Value = TxtUserID.Text;
                cmd.Parameters.Add(parmUserId);
                //Password 설정
                SqlParameter parmPassword = new SqlParameter("@password", System.Data.SqlDbType.VarChar, 20);//password속성 글자수를 20로 지정했음
                parmPassword.Value = TxtPassword.Text;
                cmd.Parameters.Add(parmPassword);

                SqlDataReader reader = cmd.ExecuteReader();
                reader.Read();
                strUserId = reader["userID"].ToString();    //"userID"는 sql문의 userID 필드값이다.


                MetroMessageBox.Show(this, "접속성공", "로그인");//Debuging할때 사용
                Debug.WriteLine("On the Debug");
            }
        }
    }
}

위와 같은 코드로 작성하였습니다.

 

이상 포스팅을 마치겠습니다~!

Hasta Luego~!

 

 

 

 

 

 

 

 

 

 

 

'C# Winform' 카테고리의 다른 글

C# Winform 강의 6일차  (0) 2020.06.22
C# Winform 강의 5일차  (0) 2020.06.19
C# Winform 강의 3일차  (0) 2020.06.17
C# Winform 강의 2일차  (0) 2020.06.16
C# Winform 강의 1일차  (0) 2020.06.15