2017-12-18 15 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#のWinFormsを使用して、フォームクラスからControlオブジェクトを削除します。 関数をpublicにしてこのクラスのインスタンスを作成してこの関数を呼び出すと、コードを実行するとこの行にエラーが表示されますParent.Controls.Remove(this);親オブジェクトがnull(ParentForm)であるためです。 このコントロールの親コントロールを持つためにインスタンス化する方法などがありますか? イベントボタンを使用して関数(他のクラス(フォーム)からではなく内部イベント)を呼び出すと、上のコードは正常に機能します。

答えて

0

他のコントロールにネストされたコントロールの動作を調べるために、小さなプロジェクトを行い、フォームクラスの外で呼び出されました。別のクラスから呼び出された場合、親フォームはnullになります。