큰푸른물의 코딩일기 [1일차 20180207] C# 컨트롤 이름으로 컨트롤 동적으로 제어하는 방법


이미 2월달도 2주차를 바라보는 시점이라 새삼 신년맞이 계획이라기는 조금 그렇지만

얼마전부터 코딩일기를 써야겠다는 생각을 하게 되었다.


연기 잘하기로 소문난 배우 조정석이 정말 노력파 인데,

매일 거르지 않고 연기일기를 써오면서 노력했다는 말을 듣고

나도 코딩일기로 게으름도 탈피 하고, 실력도 향상 시키면 좋겠다는 생각을 한것이다.


사실 이 생각을 한 지도 벌써 일주일 가까이 흘러 버렸는데,

요즘 프로젝트 막바지라 일에 치여있다는 핑계와,

일단 시작하기만 하면 하루도 거르지 않고 100일동안은 무조건 꾸준히 써보자는 계획이었기에

한창 바쁜 이 시기에 시작해서 중간에 끊어지는 것 보다는 조금 여유있을 때 시작해서

성공률을 조금이라도 올려보는게 어떨까 하는 얄팍한 생각도 있었다.


아직 프로젝트가 끝이 난것은 아니고, 이 번주 마무리 계획이었던 것이

다음주로 연기가 될 판이라 오히려 절벽 끝에 한걸음 더 다가간 상황이지만

이런식으로 미루다가는 한달이 지나도 시작도 못할것 같다는 생각과

아무리 바빠도 할거는 다하고 있으면서 잠깐 일기 하나 적을 시간 없겠냐는 생각에

일단 이렇게 질러 버리고 있는 중이다.


대신 지금 껏 블로그에 글을 적을 때 처럼 스샷을 첨부 한다든가 하는 편집은 일절 하지않고

피치못할 경우를 제외하고는 텍스트만으로 내용 위주로 써나갈까 한다.

블로그를 하는 사람들은 공감하겠지만 사소한 글 하나라도

편집해서 올리는 데는 상당한 시간과 노력이 든다.

이런 시간조차 줄여야 100일 연속 일기 성공에 조금이라도 다가가지 않을까.

일기인데 예쁜 편집이 뭐그리 중요 하겠는가 하는 자위도 하면서, 일기니까 반말은 덤.


오늘은 첫날이니까 서론이 길었는데, 내일부터는 이런 서론도 줄여야 겠다.

오늘은 새벽부터 일어나서 출근하기 전부터 시작해서 출근해서 오후 한 3시정도까지 엄청난 코딩을 했는데,

아마 사무실 히터 때문에 공기도 않좋고 눈도 건조해서 손을 놓지 않았다면 한 두 시간은 더 불타오르지 않았을까 싶다.

최근 몇년간 이렇게 고도로 집중해서 코딩을 한적이 없는 것 같다.

역시 마감이라는 녀석이 머리에 총을 겨누고 있으면 초인적인 힘을 발휘하게 되는군.

아무튼 오늘 여러가지 코딩을 한것 중에 선택한 오늘의 본론.


"C#에서 컨트롤의 이름을 이용하여 컨트롤의 핸들을 받아온 다음, 해당 컨트롤을 자유자재로 주무르는 방법"


일련의 개연성 있는 컨트롤들을 폼에 배치하여 사용하는 경우가 가끔 있다.

나는 지금껏 주로 소스단에서 배열로 컨트롤을 묶어서 선언해서 사용하는 방법을 써왔었는데,

오늘은 컨트롤의 이름으로 해당 컨트롤을 제어하는 방법을 사용했다.


예컨데, 10개의 연관성이 있는 텍스트박스에 일련의 텍스트를 변경하고자 한다면,

기본적으로

Textbox1.Text = "Content1";

Textbox2.Text = "Content2";

...

Textbox10.Text = "Content10";


이런식으로 열줄을 코딩해야 하는데, 중복코딩을 극도로 혐오하는 나는

Form로딩이벤트 같은 적절한 곳의 소스단에서 길이 10개짜리 Textbox타입 변수를 선언해놓고

for(int i=0; i<10; i++)

{

Textbox[i].Text = string.Format("Content{0}", i+1);

}

이런식으로 많이 사용해 왔었다.


하지만 오늘은 디자이너단에서 컨트롤을 추가해주고 이름만 일련번호를 가지게 지정해 준뒤

for(int i=1; i<11; i++)

{

this.Controls[string.Format("Textbox{0}", i)].Text = string.Format("Content{0}", i);

}

이런식으로 for문을 돌렸다.


오늘 사용한 방식의 최대 장점은

디자이너 단에서 컨트롤을 추가했기에 컨트롤의 위치나 크기 등

눈으로 보면서 컨트롤을 주무르기가 쉽다는 것이다.


다만 한가지 유의 할 점이 Controls 속성은 바로 하위 1단계 자식컨트롤만 반환 하므로,

위 예제 소스상의 this는 상황에 맞게 적절히 바꿔주어야 한다.



항상 느끼는 것이지만 잘돌아가고 있는 소스라도 가만히 들여다 보고 있으면

수정하고 싶은 부분이 끝이 없다.





Posted by 5CFM
,