Busan IT/제어 UI(C#)2015. 6. 11. 13:22

================================ Outline ====================================

WinForm 만들기 

----------------------------------------------------------------------------

p/614 Ch20. Winform으로 만드는 사용자 인터페이스

 

VB에서 new project windows form application을 연다.

버튼과 텍스트 박스가 생성된 해당 화면을 console을 사용하여 직접 만들어보자.


 

assemblies -> frameworkC#에서 제공하는

solution은 사용자가 만든 dll파일이다.


 

//‘form'는 초록색으로 표시되고 이는 클래스를 의미한다.

shift + F5 로 실행하면 해당 화면이 뜬다!



/***  위의 출력화면 코드 ***/


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms; //참조한 winform 호출


namespace _20150611_hardcoding

{

    class MainApp:Form

    {

        static void Main(string[] args)

        {

            MainApp form = new MainApp();

            

            


            Button button1 = new Button();      //버튼 생성

            button1.Text = "button1";           //버튼에 글자 입력


            Button button2 = new Button();      //버튼 생성

            button2.Text = "button2";           //버튼에 글자 입력

            button2.Left = 200;                 //버튼의 위치를 왼쪽에서 200pixel 이동


            form.Controls.Add(button1);         //버튼을 화면에 생성        

            form.Controls.Add(button2);         //버튼을 화면에 생성



            Application.Run(form);      //application initiate:다 만든 후 실행하여야 작성한 내용이 표시된다.

            // Application.Run(new MainApp()); //위의 코드와 동일

        }

    }

}

 

 


 

다시 VB에서 winform을 실행시켜서 코드를 보자.

 

Application.Run(new Form1()); //애플리케이션을 실행시키는 코드

// button1

//

this.button1.Location = new System.Drawing.Point(0, 0);

this.button1.Name = "button1"

this.button1.Size = new System.Drawing.Size(75, 23);

this.button1.TabIndex = 0;

this.button1.Text = "button1"

this.button1.UseVisualStyleBackColor = true

//

// Form1

//

this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 12F);

this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;

this.ClientSize = new System.Drawing.Size(284, 262);

this.Controls.Add(this.button1);

this.Name = "Form1"

this.Text = "Form1"

this.ResumeLayout(false);

 

실제로 버튼과 폼을 만들기 위해서는 위의 코드를 다 쳐 주어야 한다.

 

버튼을 클릭 했을 때 이벤트가 발생하는 eventHandler를 만들어보자.

//메소드를 나타내는 아이콘

 

과거에는 Designer.cs 라는 화면이 없었으나 코드가 너무 길이짐에 따라 partial class를 사용하여 코드를 나누어준다.

 

F12버튼을 누르면 해당 메소드가 구현된 위치로 이동한다.

 

 

Application.Exit(); //버튼 안에 삽입하고 application을 종료시키는 기능을 한다.

 

교재 p/620, 메시지 출력 시 어떠한 매커니즘이 일어나는지 알고 싶다면 읽어보자.

 

사용자가 조작하는 대로 프로그램이 진행되는 것을 Event Driven Program이라고 한다.

 

//ctrl + tap 으로 vb안의 탭을 이동할 수 있다.

  

콤보 박스에서 목차 만드는 법.



교재 p/643의 내용을 따라 WinForm을 만들어보자.



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;

namespace _20150611_newinform
{
    public partial class Form1 : Form
    {
        Random random = new Random(37); //난수 생성
        


        public Form1()
        {
            InitializeComponent();

            lvDummy.Columns.Add("Name");
            lvDummy.Columns.Add("Depth");

        }

        private void Form1_Load(object sender, EventArgs e)
        {
            var Fonts = FontFamily.Families;    //운영체제에 설치되어 있는 폰트 목록 검색
            foreach (FontFamily font in Fonts)  //cboFont 컨트롤에 각 폰트 이름 추가
                cboFont.Items.Add(font.Name);
        }

        void ChangeFont()
        {
            if (cboFont.SelectedIndex < 0)      // cboFont에서 선택한 항목이 없으면 메소드 종료
                return;

            FontStyle style = FontStyle.Regular;    // FontStyle 객체를 초기화합니다.

            if (chkBold.Checked)                // "굵게"를 체크하면 bold논리합 수행
                style |= FontStyle.Bold;
            
            if (chkItalic.Checked)                // "이탤릭"를 체크하면 bold논리합 수행
                style |= FontStyle.Italic;

            txtSampleText.Font = // textSampletext의 Font를 앞에서 만든 스타일로 수정
                new Font((string)cboFont.SelectedItem, 10, style);

        }

        private void cboFont_SelectedIndexChanged(object sender, EventArgs e)
        {
            ChangeFont();
        }

        private void chkBold_CheckedChanged(object sender, EventArgs e)
        {
            ChangeFont();
        }

        private void chkItalic_CheckedChanged(object sender, EventArgs e)
        {
            ChangeFont();
        }

        private void txtSampleText_TextChanged(object sender, EventArgs e)
        {

        }

        private void tbDummy_Scroll(object sender, EventArgs e)
        {
            pgDummy.Value = tbDummy.Value;  //슬라이더 위치에 따라 프로그레스바의 내용도 변경
        }

        private void btnModal_Click(object sender, EventArgs e)
        {
            Form frm = new Form();
            frm.Text = "Modal Form";
            frm.Width = 300;
            frm.Height = 100;
            frm.BackColor = Color.Red;
            frm.ShowDialog();   //Modal 창을 띄웁니다.
        }

        private void btnModaless_Click(object sender, EventArgs e)
        {
            Form frm = new Form();
            frm.Text = "Modaless Form";
            frm.Width = 300;
            frm.Height = 300;
            frm.BackColor = Color.Green;
            frm.Show();   //Modaless 창을 띄웁니다.
        }

        private void btnMsgBox_Click(object sender, EventArgs e)
        {
            MessageBox.Show(txtSampleText.Text,
                "MessageBox Test", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        }

        void TreeToList()
        {
            lvDummy.Items.Clear();
            foreach (TreeNode node in tvDummy.Nodes)
                TreeToList(node);
        }

        void TreeToList(TreeNode Node)
        {
            lvDummy.Items.Add(new ListViewItem(new string[] 
            {
                Node.Text, Node.FullPath.Count(f => f == '\\').ToString()
            }));

            foreach (TreeNode node in Node.Nodes)
            {
                TreeToList(node);
            }
        }


        private void btnAddRoot_Click(object sender, EventArgs e)
        {
            tvDummy.Nodes.Add(random.Next().ToString());
            TreeToList();
        }

        private void btnAddChild_Click(object sender, EventArgs e)
        {
            if (tvDummy.SelectedNode==null)
            { 
                MessageBox.Show("선택된 노트가 없습니다.",
                    "TreeView Test", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
            tvDummy.SelectedNode.Nodes.Add(random.Next().ToString());
            tvDummy.SelectedNode.Expand();
            TreeToList();
        }


    }
}



반응형
Posted by newind2000