2017-05-08 1 views
0

나는 splitcontainer가 있습니다. 패널 1에는 필자가 패널 2를 클릭 할 때 사용자 컨트롤을 여는 7 개의 툴 스트립 버튼이 있습니다. . 사용자 정의 컨트롤은 사용자가 입력 할 수 있습니다 다른 텍스트 상자로 구성되어 코드는 다음과 같습니다C에서 다른 사용자 컨트롤간에 전환 할 때 컨트롤 값 저장 및로드

private void toolStripButtonBaseLayers_Click(object sender, EventArgs e) 
{ 
    splitContainer1.Panel2.Controls.Clear(); 
    BaseLayers BL = new BaseLayers(); 
    splitContainer1.Panel2.Controls.Add(BL); 
} 

private void toolStripButtonSpatialCoverage_Click(object sender, EventArgs e)  
{ 
    splitContainer1.Panel2.Controls.Clear(); 
    SpatialCoverage SC = new SpatialCoverage(); 
    splitContainer1.Panel2.Controls.Add(SC); 
} 

private void toolStripButtonFloodMaps_Click(object sender, EventArgs e) 
{ 
    splitContainer1.Panel2.Controls.Clear(); 
    FloodMaps FM = new FloodMaps(); 
    splitContainer1.Panel2.Controls.Add(FM); 
} 

을 지금은 매번 내가 패널을 취소하기 때문에 사용자 컨트롤이 비어 클릭 이벤트와 다른 사용자 컨트롤을 열고 새 사용자 정의 컨트롤을 엽니 다. 이것은 내가하고 싶은 것이 아닙니다!

제 질문은 입력란에 입력 한 내용을 모두 저장하는 것이 가능하다는 것입니다. 그리고 그것들을 전환 할 때 모든 사용자 컨트롤 값이 채워질 가능성이 있습니까? 예를 들어 사용자 컨트롤 BaseLayers를 채우고 사용자 컨트롤 Spatial Coverage 및 Flood Maps로 전환하고 사용자 컨트롤 BaseLayers로 다시 돌아 가면 모든 것이 채워 져야합니다.

+0

가) * 매우 * 위험하다, 그것은 제거 컨트롤을 처분하지 않습니다. 그들은 앱의 일생 동안 누출을 일으킬 것입니다. 그러나 그것은 당신이 원하는 것처럼 보이는 그대로입니다. 새로운 인스턴스를 만들지 않고 기존 인스턴스를 재사용 할 수 있도록 참조를 추적해야합니다. –

+0

사용자 정의 컨트롤의로드 및 닫기 이벤트에서 가능합니까? 아니면 어떻게 보입니까? – user3415824

답변

0

모든 컨트롤을 만들고 숨기기 그들 중 (Visible=false). 그런 다음 클릭 이벤트에서 해당 컨트롤에 대해 Visible=true을 설정하면됩니다.

예 : Controls.Clear를 (사용

private void toolStripButtonFloodMaps_Click(object sender, EventArgs e) 
{ 
    SetChildVisibleForPanel(typeof(FloodMaps), splitContainer1.Panel2); 
} 

static void SetChildVisibleForPanel(Type visChildType, Panel pnl) 
{ 
    if (pnl.Controls.Count==0) 
    { 
     //Create your controls with Visible=false; 
    } 
    foreach (Control ctl in pnl.Controls) 
    { 
     ctl.Visible = (ctl.GetType() == visChildType); 
    } 
} 
관련 문제