PROGRAMMING WORKSHOP

VB.Net | 콘트롤에 툴팁 만들기

VB.Net에 대한 문법을 차근,차근 설명하려니..
보는 분들이나 작성하는 사람이나 지루하기 짝이 없다
그래서 실무적으로 들어가면서 VBA에서 [엑셀로 배우는 VB]주간화일에서와
같이 이런 저런 것을 만들어가면서 그때,그때 문법이야기를 하는 것이
좋을 것 같고, VSTO에 대하여 궁금한 것이 많은 분들도 있고 하니
실제로 Window Form등의 콘트롤등을 사용하는 요령들을
살펴보는 것이 흥미로울 것이다

물론 Window폼을 엑셀에드인을 만들면서 부속품으로 잡아 넣고
활용하는 것이니..
Window Form 프로그래밍이 곧 엑셀프로그래밍이 셈이 되는 것이 VSTO이다

지난주에 베타버전으로 올린 UNO-CPM(프로젝트관리 에드인)
만들면서 파생되는 이야기도 좀 해보도록 하자
많이들 사용해 보시고(프로젝트관리자가 아니라도..프로그래밍적인 접근으로..)
피드백을 주시면 더 좋은 이야기들이 있을 것이다

많은 Window폼의 컨트롤을 사용하다 보면
사용자에게 어떤 컨트롤이 어디에 사용되는지 시각적으로
알려주는 것이 좋을 것이다
그런데 컨트롤를 그려 놓고 아무리 속성창을 뒤져 보아도
ToolTip속성같은 것이 없다
VBA에서는 UserForm의 컨트롤 속성창을 보면 있는데 ..
Window Form에는 없다..



도대체 어디에서 넣는 거야??
초보때 한참을 뒤져야 찾는다..
실은 프로그래밍적으로 접근한다
아래와 같이 접근한다

모든 것이 개체라고 했다..문자열 하나도 개체로 만들어서 붙인다

Dim oTip As New Windows.Forms.ToolTip
oTip.ToolTipTitle = "컨트롤에 대한 사용자에게 주고 싶은 설명"
oTip.SetToolTip(chkControl, "툴팁제목")

예를 들어서 chkControl이라는 콘트롤에 툴에 대한 설명을 붙이고
싶다면 위와 걑이 폼이 로딩될때 프로그래밍적으로 설정하는 것이다
아래와 같이 사용자가 마우스를 올리면 위에 적용한 것이 나타나게 된다



실제로는 아래와 같이 한다

Sub SetToolTips() SetToolTips_(Me.btnOpenTreeviewEditor, "작업목록을 범위에서 선택하시면 작업시간이 많이 단축될수 있습니다", "WBS편집기") SetToolTips_(Me.chkBasicTableWBS, "작업의 상하관계 그룹핑을 하시려면 사용합니다,그룹핑은 5단계까지 적용할 수 있습니다", "WBS코드사용여부") SetToolTips_(Me.btnCreateSampleData, "쌤플 작업데이타를 만들고 각기능을 실행해보세요, 그리고 작업데이타입력에 참고하세요", "쌤플데이타만들기") SetToolTips_(Me.optSampleDataWithWBS, "쌤플데이타가 만들어서 참조하시고 싶으시면 이것을 선택한 상태에서 하세요", "쌤플데이타모드") SetToolTips_(Me.optNewDataWithWBS, "직접시트에 작업내용을 입력하려면 이 옵션을 선택하시고 하세요", "데이타입력모드") SetToolTips_(Me.btnCreateScheduleTable, "작업간의 논리적구성을 검증하고 일정계산및 분석된 내용을 별도의 시트에 만듭니다", "데이타분석및보고서") SetToolTips_(Me.chkRateTable, "일정별 금액에 대한 보할분배테이블을 만듭니다", "데이타분석및보고서") SetToolTips_(Me.optByRate, "전체금액에 대한 백분률로 보할테이블을 만듭니다", "데이타분석및보고서") SetToolTips_(Me.optByAmount, "각작업별금액을 일정별 보할테이블을 만듭니다", "데이타분석및보고서") SetToolTips_(Me.chkScheduleScurve, "각 보할에 의한 일정별 진행률을 곡선으로 표현합니다", "데이타분석및보고서") SetToolTips_(Me.cboCalendarUnit, "보할테이블이나 챠트의 일정단위를 지정합니다", "데이타분석및보고서") SetToolTips_(Me.chkScheduleWBS, "WBS테이블의 경우 분석테이블상에 WBS를 사용할수도 있고 생략할수도 있습니다", "데이타분석및보고서") SetToolTips_(Me.chkCPColor, "분석테이블상에 선행,후행관계테이블에서 주공정작업을 색상으로 표시합니다", "데이타분석및보고서") SetToolTips_(Me.cboCalendarUnit, "모든 챠트와 스케쥴상의 카렌다테이블에 적용됩니다", "카렌다일정설정") End Sub Sub SetToolTips_(ByVal oX As Windows.Forms.Control, ByVal sMemo As String, ByVal sTitle As String) Dim oTip As New Windows.Forms.ToolTip oTip.ToolTipTitle = sMemo oTip.SetToolTip(oX, sTitle) End Sub

위와같이 폼이 로딩될때 SetToolTips프로시져를 호출하면
모든 컨트롤에 설정한대로 툴팁이 적용되는 것이다
위와 같이 하는 것은 좋은 것은 큰 소루션을 만들때
위와 같이 통합적으로 관리하지 않으면 언놈이..언놈인지 헷갈리고
적용한 놈 딴 곳에서 또 하고, 어떤 것은 빼먹고..그렇게 되는 것이다
VBA에서도 종종 UserForm을 만들때 프로그램적으로 접근하여
처리하곤 하는 것을 보시면 의아하게 생각할때가 많을 것이다
모두 큰 소루션을 만들기위한 기본적인 습관을 그렇게 붙이면 좋은 것이라서
자꾸 이야기하는 것이다