현재 개인 프로젝트에서

입력 된 값만큼 텍스트 박스를 생성을 해야 하는 작업을 하다가 동적으로 텍스트 박스를 생성하는데 꽤나 긴 시간이 소비되어

다음에 같은 작업을 할 때 시간을 좀 더 덜어내고자 글을 쓰게 되었다.





작업 해야 할 프로그램 화면 구성은 아래의 이미지와 같다.



  





먼저 해당 객체에는

public List<TextBox> userNameBoxList; 와 같은 List 컨테이너를 통해서 TextBox를 저장했다.

TextBox를 그려줄 canvas가 필요했고 CNV_tb_cnv라는 변수명으로 Canvas를 생성했다.







Canvas.SetTop

Canvas.SetLeft


위의 두 함수와 간단한 수식을 통해서 그려줄 위치를 설정하였고. 리스트 원소에 접근하여 width, height를 설정하였고

CNV_tb_cnv의 Children으로 추가하여주었다.



참조코드 :


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
            int startX = 100;
            int startY = 50;
 
            int maxCntinLine = 2;
            double offsetX = IMG_UserMap.Width / 2;
            double offsetY = 30 + IMG_UserMap.Height / 6 ;
 
            for ( int i = 0; i < maxUser; ++i)
            {
                userNameBoxList.Add(new TextBox());
                
                // 위치
                Canvas.SetLeft(userNameBoxList[i], startX + (i % maxCntinLine) * offsetX);
                Canvas.SetTop(userNameBoxList[i], startY + (i / 2* offsetY);
 
                // 높이 / 너비

userNameBoxList[i].Width = IMG_UserMap.Width / 4;
                userNameBoxList[i].Height = IMG_UserMap.Height/ 6;
 
                CNV_tb_cnv.Children.Add(userNameBoxList[i]);
                
 
 
            }

cs




2019.02.16


WPF의 Mainwindow에서 버튼을 누르면 기존 창이 가려지고, 

새로운 창이 나와야 하는 작업을 하는 과정에서 생각보다 시간을 많이 쓰게 되었다.

내가 같은 실수를 하지 않기 위해,

나와 같은 어려움을 겪은 분들을 위해 글을 남긴다.




1. DLL 생성



DLL 추가하고자 하는 솔루션에서 마우스 오른쪽 버튼을 눌러 [ 새 프로젝트 추가 ]를 누르고 [ 클래스 라이브러리 ] 를 생성 한다.




생성된 클래스라이브러리에서 나는 wpf 사용자 컨트롤을 사용 할 것이니 사용자 정의 컨트롤(WPF)를 눌러 생성한다.



시작 프로젝트의 참조에서 마우스 오른쪽 버튼을 눌러 [ 참조 추가 ]로 들어간다.



해당 DLL을 체크하고 확인을 누른다. 이후에 생성한 DLL 프로젝트에서 마우스 오른쪽 버튼을 눌러 시작프로젝트로 설정하여 주고

빌드하여 준다. 그렇게 하면 bin\debug 경로에 DLL 파일이 생성된다.


그런데 만약 빌드가 되지 않고 아래 이미지와 같은 에러가 뜬다면



위에서 참조추가 했던것과 마찬가지로 system.xaml을 참조추가하면 해결된다.



이제 DLL은 생성이 완료되었다. 메인윈도우에서 해당 버튼을 눌렀을때 방금 만들었던 사용자컨트롤 창을 띄우게 하면된다.




나는 유저 컨트롤이 생성되는 시점에서 Visibility를 hidden으로 두고 메인윈도우에서 해당 창을 띄우는 버튼을 눌렀을때 창이 visible 상태가 될수있도록 Show 함수를 작성하였다. 이제 메인에 사용자 컨트롤을 컨트롤 할 수 있는 변수를 생성하고 메인 canvas에 해당 childwindow를 add해주면 된다. 아래의

이미지를 참고하자









끝!


오늘 WPF 관련 프로젝트를 진행하는 과정에서 컨트롤 속성창이 나오지 않아 당황을 했다.






바로 이 친구가 사라졌다. 


이 친구는 F4 Key를 입력 하거나


혹은



보기 -> 속성 창을 통해서 다시 활성화 시킬 수 있다.




+ Recent posts