폐암 데이터 라벨링 작업을 위한 툴을 개발 중인데, 정답 이미지 레이블링을 진행한 후 그 레이블링에 대한 정보를 여러 개를 입력해야 한다.
이런 식으로 한 라벨링 당 저장해야 하는 정보가 많다는 뜻이다. (동일한 데이터 구조로)
요청을 받은 부분은 임파선 라벨링을 할 때 임파선의 위치 (첫 번째 노란 박스) 와 임파선의 양성, 악성 구분 + 해당 임파선에 대한 스코어(두번째 노란 박스) 를 따로 저장할 수 있게 프로그램을 만들어 달라는 것이었다.
C# winform으로 진행을 하고 있었고 저장된 라벨링 정보는 csv에 전부 넣고 있었는데 추가 요청이 들어와서 싹 다 갈아 엎어야 하는 상황이 왔다......
어차피 암으로 판정되는 부위를 그리고 나면 서브 폼이 떠서 그 라벨링에 대한 정보를 저장해 놓을 수 있게 했기 때문에 서브폼에 탭을 동적으로 만들어 추가를 해야 하면 추가하는 식으로 개발하기로 했다.
너무 애매했던 게 저렇게 라벨링 부위를 노란색으로 색칠을 해도 저 부위가 위치가 3R일 수도 있고 4R일 수도 있고, 위치가 5일 수도 있고 6일 수도 있다는 거다. 그러니까 정확한 위치 판별이 되지 않는다는 뜻이다. 그리고 추가하는 데이터가 최대 몇 개까지 나올 수 있는지도 정확하지 않다. 정확하지 않은 데이터를 정형적으로 만들려고 하니 하...... 하지만 개발로는 안 되는 게 없다. 다시 정신 잡고 프로그램 프로세스를 생각해 보자 ㅋㅋ
결국 탭을 만들어 추가 버튼을 누르면 무한으로 만들 수 있게 구축했다.
스택오버플로나 다른 블로그 검색해도 for문으로 탭 여러개 만들기 이런 것밖에 안 뜨던데 어디서 하나 찾아서 코딩했던 것 같다......
탭 안의 폼 내용은 사용자 컨트롤을 만들어 넣었다.
탭 추가를 하면 동적으로 탭이 생성된다.
// 탭 추가 버튼 이벤트
private void btnAddTab_Click(object sender, EventArgs e)
{
// 추가할 TabPage 선언
TabPage nodeTab = null;
// TabPage 안에 들어갈 내용
// 사용자 컨트롤을 만들어서 넣었기 때문에 사용자 컨트롤도 선언해 준다
AddNodeControl nodeControl = new AddNodeControl();
// TabPage 위에 텍스트를 추가해 주고 싶으면 new TabPage("text"); 로 작성해도 됨
nodeTab = new TabPage();
// TabPage 안에 사용자 컨트롤 넣기
nodeTab.Controls.Add(nodeControl);
// 나는 탭 제목들을 추가할 때마다 1 2 3 4 5 로 만들어 주기 위해서 이렇게 했다
nodeTab.Text = (tabNode.SelectedIndex + 2).ToString();
nodeTab.UseVisualStyleBackColor = true;
// 전체 탭컨트롤의 이름이 tabNode임.
// tabNode에 탭 페이지를 추가할 것이다 <- nodeTab을
tabNode.TabPages.Add(nodeTab);
// 이 부분을 작성하지 않으면 추가한 탭 페이지로 포커스 되지 않고 첫 번째 탭으로 포커스가 됨.
// 추가한 페이지로 포커스 하고 싶으면 이 구문 쓰면 된다
tabNode.SelectedTab = nodeTab;
}
탭 제거 버튼
private void btnRemoveTab_Click(object sender, EventArgs e)
{
if (MessageBox.Show(string.Format("{0}번 탭을 삭제하시겠습니까?"
, (tabNode.SelectedIndex + 1).ToString()), "삭제"
, MessageBoxButtons.YesNo) == DialogResult.Yes)
{
// 탭 삭제
tabNode.TabPages.Remove(tabNode.SelectedTab);
}
else
{
return;
}
}
winform에서 버튼 클릭으로 탭 추가하는 방법에 대해서 알아 보았다.
'Develop > C#' 카테고리의 다른 글
DataTable에서 해당하는 값 찾기 (0) | 2022.05.18 |
---|---|
npgsql timeoutException (1) | 2021.07.29 |