C# 에서 UI 를 만들 때 컨트롤들이 원하는 대로 dock 이 안될 때가 많다.

다른 컨트롤에 add 되거나...  dock 순서가 꼬이거나..


그럴때는 속편하게 UI [디자인] 대신 Designer.cs 파일을 직접 열어서 컨트롤간 상의 관계와

dock 순서를 제어하는게 빠르다..


1. 컨트롤간의 add 를 먼저 확인한다. 다른 컨트롤에 붙는 경우도 많다..

2. form 에 컨트롤이 add 되는 순서를 확인한다.

   UI[디자인] 에서 add 되는 순서로 자동으로 docking 포지션을 가지기 때문에 확인 필수


예> 

   this.Controls.Add(this.mainPanel);

   this.Controls.Add(this.topPanel);


'IT > C#' 카테고리의 다른 글

폼(Form) 이동 막기  (0) 2014.12.02
BrowserControl 과 javascript 통신  (1) 2014.12.02

폼(Form) 이동 막기

C# 에서는 WndProc 를 override 하여 메세지에 대한 제어를 할 수 있다.

그중 가장 간단한 폼이동을 막는 기능을 살펴보자


        // 1. 컨트롤할 메세지에 대한 정의

        private const int WM_SYSCOMMAND = 0x0112;

        private const int SC_MOVE = 0xF010;


        protected override void WndProc(ref Message message)

        {        

             switch (message.Msg)

            {

                 // 2. 컨트롤 할 메세지는 이부분에 추가 한다.

                  case WM_SYSCOMMAND:

                     int command = message.WParam.ToInt32() & 0xfff0;

                     // 3. 이동에 대한 경우 리턴 시킴

                     if (command == SC_MOVE)

                          return;

                     break;

            }

            // 다른 메세지는 그대로 전달함

            base.WndProc(ref message);

        }


순서

1. 제어할 메세지 정의

2. 메세지에 대한 컨트롤

3. 해당 메세지 제어한 것으로 완료할 경우 return 시킴. 간단함 커스터마이징만하고 기본동작이 실행되기를 원한다면 return 시키면안됨

4. 자바로 보면 super , C# 으로는 base 에게 메세지 전달


이상 ~~~ 쉽죠잉~

'IT > C#' 카테고리의 다른 글

Control Docking  (0) 2014.12.02
BrowserControl 과 javascript 통신  (1) 2014.12.02

C# 에서 제공하는 WebBrowser 컨트롤과 컨트롤안에 로드된 javascript 간의 통신방법이다.


1. javascript 에서 C# 호출방법

    아래와 같은 선언이 필요하며, 호출될 메소드는 당연히 public 이어야 한다. 


    [PermissionSet(SecurityAction.Demand, Name = "FullTrust")]

    [ComVisible(true)]

    public partial class AppContainer : Form{

         // .. 중략


        /**

         * 호출될 public 메소드

         * 호출받은 값을 메세지 박스로 보여줌

         */

        public void RecieveJs(Object msg)

        {

            MessageBox.Show(@"받은 값" + msg);

        }

        /**

         *  아래와 같이 호출시 리턴도 가능하다.

         *  디렉토리목록을 보여주고 선택한 디렉토리의 파일목록을 리턴함

         */

        public string ShowDirectory()

        {

            var files = String.Empty;

            var folderBrowser = new FolderBrowserDialog();

            if (folderBrowser.ShowDialog() == DialogResult.OK)

            {

                files = String.Join(",", Directory.GetFiles(folderBrowser.SelectedPath));

            }

            return files;

        }

    }


2. C# 에서 javascript 호출

C# form의 textbox 두개의 값을 버튼 클릭시 javascript 로 보내는 예제이다.

invoikeScript 를 통해 호출할 function 명 및 parameter 를 전송한다.

    // wb 는 WebBrowser 컨트롤 변수명

     private void SendBtn_Click(object sender, EventArgs e)

    {

         if (wb.Document != null)

         {

               Object[] objArray = {textBox1.Text, textBox2.Text};

              // javascript 의 recieveMessage function 을 호출함

               wb.Document.InvokeScript("recieveMessage", objArray);  

          }

     }


이상

'IT > C#' 카테고리의 다른 글

Control Docking  (0) 2014.12.02
폼(Form) 이동 막기  (0) 2014.12.02

+ Recent posts