4

ユーザーコントロールの一部が新しいウィンドウに「ポップアウト」できるようにしたいと考えています。ユーザー コントロールは現在の場所に留まり、現在の状態のコピーを新しいウィンドウに送信します。また、派生クラスがこの機能を持つように、この機能を基本クラスに含めたいと考えています。

これが私がこれまでに持っているものです:

public class PopoutControl : XtraUserControl
{
    public void Popout()
    {
        XtraForm PopoutForm = new XtraForm();
        PopoutForm.Controls.Add(this);
        Dock = DockStyle.Fill;
        PopoutForm.Show();
    }
}


public partial class PopoutControlTest : PopoutControl
{
    public PopoutControlTest()
    {
        InitializeComponent();
    }

    private void OnPopoutRequest(object sender, EventArgs e)
    {
        Popout();
    }
}

これは、ユーザーコントロールが配置されている元のフォームからユーザーコントロールを削除することを除いて機能します-新しいフォームに配置するために-どうすればこれを解決できますか?

  • ウィリアム
4

2 に答える 2

3

たとえば、「Clone」メソッドを実装して、参照を渡す代わりにコントロールのコピーを作成する必要があります。

public class PopoutControl : XtraUserControl
{
    public void Popout()
    {
        XtraForm PopoutForm = new XtraForm();
        PopoutForm.Controls.Add(this.Clone());
        Dock = DockStyle.Fill;
        PopoutForm.Show();
    }

    public PopoutControl Clone()
    { 
       var p = new PopoutControl();

       // implement copying of the current state to p here
       // ...

       return p;
    }

}

編集: Windows フォーム コントロールを複製またはシリアル化する一般的な方法については、次の記事を参照してください。

http://www.codeproject.com/Articles/12976/How-to-Clone-Serialize-Copy-Paste-a-Windows-Forms

于 2012-08-02T12:13:44.007 に答える
1

PopOut() を変更する必要があります。「this」のクローンを作成します。複製されたオブジェクトを、作成された新しいフォームに追加します。PopOutControl クラスに ICloneable インターフェイスを実装します。clone() メソッドは、「PopOutControl」オブジェクト、つまり「this」と同じ状態になるように実装する必要があります。

public void Popout()
    {
        XtraForm PopoutForm = new XtraForm();
        PopoutForm.Controls.Add(this.Clone());
        Dock = DockStyle.Fill;
        PopoutForm.Show();
    }
于 2012-08-02T12:14:58.293 に答える