2017-12-18 36 views
0

내가추가/

private void UndockControl() 
    { 
     if (Parent == null) 
     { 
      Control c = this.Parent; 
     } 
     if (m_floatingFrame == null) 
     { 
      m_floatingFrame = new FloatingFrameWindow(); 
      m_floatingFrame.Owner = ParentForm; 
     } 

     if (Parent is TableLayoutPanel) 
     { 
      var parentPanel = (TableLayoutPanel)Parent; 
      var col = parentPanel.GetColumn(this); 
      var small = new ColumnStyle(SizeType.Absolute, 1); 
      parentPanel.ColumnStyles[col] = small; 
     } 

     Parent.Controls.Remove(this); 
     m_floatingFrame.Controls.Add(this); 
     ParentForm.FormClosing += ParentForm_FormClosing; 
     Dock = DockStyle.Fill; 

     m_floatingFrame.Show(); 
     m_isDocked = false; 
     uiDockButton.ImageIndex = 0; 
    } 

이 컨트롤은 다른 컨트롤에 중첩되어이 기능이 다른 클래스 C#의 윈폼을 사용하여 Form 클래스에서 컨트롤 개체를 제거합니다. 함수를 public으로 만들고 해당 클래스의 인스턴스를 만들어이 함수를 호출하면 코드를 실행하면이 줄에 오류가 발생합니다. Parent.Controls.Remove(this); 부모 개체가 null (또한 ParentForm)이기 때문에이 줄을 표시합니다. 이 컨트롤에 대한 부모 컨트롤을 갖기 위해 인스턴스 또는 다른 방법이 있습니까? 이벤트 단추를 사용하여 함수 (다른 클래스 (폼)가 아닌 내부 이벤트)를 호출하면 위의 코드가 제대로 작동합니다.

답변

0

다른 컨트롤에 중첩 된 컨트롤의 동작을 확인하고 폼 클래스 외부에서 호출 한 작은 프로젝트를 수행했습니다. 그것은 다른 클래스에서 호출하는 경우 부모 폼 null이 될 것으로 보인다.