레이블이 #닷넷윈폼인 게시물을 표시합니다. 모든 게시물 표시
레이블이 #닷넷윈폼인 게시물을 표시합니다. 모든 게시물 표시

2021년 11월 6일 토요일

윈폼 MVC 예제

 윈폼 MVC 예제


참조 : https://www.codeproject.com/Articles/383153/The-Model-View-Controller-MVC-Pattern-with-Csharp


IKYnHymele1WSUOJt8bv4VP1kn25FhDiXUbcgNzv


1. 파일 -> 새로만들기 -> 프로젝트에서 “Windows Forms 응용프로그램” 선택 후 프로젝트명 :  UseMVCApplication, 솔루션명 : WinFormMVC 으로 입력하자.


2. 솔루션에서 마우스 우측버튼 클릭 -> 추가 -> 새프로젝트로 MVC-Controller, MVC-Model, MVC-View 3개의 프로젝트를 생성하자.


3. MVC-Controller 프로젝트


- MVC-Model을 참조 추가


[IUserView.cs]

using System;

using WinFormMVC.Model;

 

namespace WinFormMVC.Controller

{

    public interface IUsersView

    {

        void SetController(UsersController controller);

        void ClearGrid();

        void AddUserToGrid(User user);

        void UpdateGridWithChangedUser(User user);

        void RemoveUserFromGrid(User user);

        string GetIdOfSelectedUserInGrid();

        void SetSelectedUserInGrid(User user);

        

        string Name          { get; set; }

        string ID            { get; set; }

        string Department    { get; set; }

        User.SexOfPerson Sex { get; set; }

 

        // View화면의 txtID 텍스트박스의 Enabled를 true, faluse로 설정

        bool CanModifyID     {      set; }

    }

}


[UserController.cs]

using System;

using System.Collections;

using WinFormMVC.Model;

 

namespace WinFormMVC.Controller

{

    public class UsersController

    {

        IUsersView view;

 

        IList      users;

        User       selectedUser;

         

        //생성자에서 view와 데이터를 가지고 있는 users를 셋팅

        public UsersController(IUsersView view, IList users)

        {

            this.view = view;

            this.users = users;

            view.SetController(this);

        }

 

        // Users 속성정의, 읽기전용으로 users를 리턴

        public IList Users

        {

           get

            {

                return ArrayList.ReadOnly(users);

            }

        }

 

        // 매개변수로 넘어오는 User객체로 View의 프로퍼티를 채운다.

        private void updateViewDetailValues(User usr)

        {

           view.Name        =  usr.Name;

           view.ID          =  usr.ID;

           view.Department  =  usr.Department;

           view.Sex         =  usr.Sex;

        }

 

        // 입력 매개변수인 User 객체로 View의 프로퍼티를 설정

        private void updateUserWithViewValues(User usr)

        {

           usr.Name          =  view.Name;

           usr.ID            =  view.ID;

           usr.Department    =  view.Department;

           usr.Sex           =  view.Sex;

        }

 

        //ListView에 users 데이터를 채우고 첫번째 데이터가 선택되도록 함.

        public void LoadView()

        {

            // ListView를 Clear 하고 칼럼을 셋팅

            view.ClearGrid();

 

            //users 수만큼 루프돌면서 UserView의 userList 라는 이름의 ListView에 

            //데이터 채움

            foreach (User usr in users)

                view.AddUserToGrid(usr);

 

            //users의 첫번째 데이터가 상단의 디테일 부분에 로드되도록

            view.SetSelectedUserInGrid((User)users[0]);

        }

 

        public void SelectedUserChanged(string selectedUserId)

        {

            foreach (User usr in this.users)

            {

                if (usr.ID == selectedUserId)

                {

                    selectedUser = usr;

                    updateViewDetailValues(usr);

                    view.SetSelectedUserInGrid(usr);

 

                    // View화면의 txtID 텍스트박스의 Enabled를 false로

                    this.view.CanModifyID = false;

                    break;

                }

            }

        }

 

        //View에서 AddUser 클릭시 호출됨

        public void AddNewUser()

        {

            //성별만 남성으로 한 빈 User 객체 생성 후 updateViewDetailValues 호출하여 입력모드로 설정

            selectedUser = new User(""   /*name*/

                                     ""  /*id*/

                                     ""  /*department*/,

                                     User.SexOfPerson.Male /*sex*/);

                             

            //빈 User객체를 넘기면 View의 프로퍼티를 이용하여 View화면의 Name, id, department 값을 공백으로 설정         

            this.updateViewDetailValues(selectedUser);

 

            // View화면의 txtID 텍스트박스의 Enabled를 true로

            this.view.CanModifyID = true;

        }

 

        //Remove User 클릭시 호출됨

        public void RemoveUser()

        {

            //현재 선택된 User의 ID를 문자열로 리턴

            string id = this.view.GetIdOfSelectedUserInGrid();

 

            User userToRemove = null;

 

            if (id != "")

            {

                foreach (User usr in this.users)

                {

                    if (usr.ID == id)

                    {

                        userToRemove = usr;

                        break;

                    }

                }

 

                if (userToRemove != null)

                {

                    // 삭제할 User의 ListView내의 Index를 얻음

                    int newSelectedIndex = this.users.IndexOf(userToRemove);

 

                    // IList users 리스크에서 User 삭제

                    this.users.Remove(userToRemove);

 

                    //ListView에서 User 삭제

                    this.view.RemoveUserFromGrid(userToRemove);

 

                    if (newSelectedIndex > -1 && newSelectedIndex < users.Count)

                    {

                        // ListView에서 인자로 넘기는 User를 찾아 선택이 되도록 한다.

                        // ListView의 SelectedIndexChanged 이벤트가 발생하여 

                        // ListView의 선택된 User가 상단 상세화면에 출력된다. 

                        this.view.SetSelectedUserInGrid((User)users[newSelectedIndex]);

                    }

                }

            }

        }

 

        // 저장버튼 클릭

        public void Save()

        {

            // View상단화면에서 사용자가 입력한 값으로 User객체를 셋팅

            updateUserWithViewValues(selectedUser);

 

            // IList타입인 users 리스트에 저장하고자 하는 User가 있는지 검사하여

            // 없으면 저장, 있으면 수정을 한다.

            if (!this.users.Contains(selectedUser))

            {

                // IList타입인 users 리스트에 새로운 User 입력

                this.users.Add(selectedUser);

 

                // 입력된 User를 ListView에 추가

                this.view.AddUserToGrid(selectedUser);

            }

            else

            {

                // 입력되는 User로 ListView를 Update

                this.view.UpdateGridWithChangedUser(selectedUser);

            }

            view.SetSelectedUserInGrid(selectedUser);

 

            // View화면의 txtID 텍스트박스의 Enabled를 false로

            this.view.CanModifyID = false;

 

        }

 

    }

}


4. MVC-Model 프로젝트


[User.cs]

using System;

 

namespace WinFormMVC.Model

{

    public class User

    {

        public enum SexOfPerson

        {

            Male   = 1,

            Female = 2

        }

 

        private string _Name;

        public string Name 

        {

            get { return _Name; } 

            set 

            { 

                 if (value.Length > 50)

                     Console.WriteLine("Error! Name must be less than 51 characters!"); 

                 else

                     _Name = value

            } 

        }

        

        private string _ID;

        public string ID

        {

            get { return _ID; }

            set

            {

                if (value.Length > 9)

                    Console.WriteLine("Error! ID must be less than 10 characters!");

                else

                    _ID = value;

            }

        }

 

        private string _Department;

        public string Department

        {

            get { return _Department; }

            set { _Department = value; }

        }

 

        private SexOfPerson _Sex;

        public SexOfPerson Sex

        {

            get { return _Sex; }

            set { _Sex = value; }

        }

 

 

        public User(string name, string id, string department, SexOfPerson sex)

        {

            Name   = name;            

            ID          = id;

            Department  = department;

            Sex         = sex;

        }

    } 

 

}

 

#윈폼, #윈폼MVC, #닷넷, #닷넷윈폼

(C#교육동영상)C# ADO.NET 실습 ODP.NET/ODAC 설치 오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원

  (C#교육동영상)C# ADO.NET 실습  ODP.NET/ODAC 설치  오라클 함수 호출 실습, C#학원, WPF학원, 닷넷학원, 자바학원 https://www.youtube.com/watch?v=qIPU85yAlzc&list=PLxU-i...