0

複製されたパネルの子コントロールの再描画に問題があります。

まず、IClonableを使用していませんリフレクションを使用しています。

私のコード:

public static Panel ClonePanel(Panel panel)
{
    Panel newPanel = (Panel) CloneControl(panel);

    foreach (Control ctl in panel.Controls)
    {
        Control newCtl = CloneControl(ctl);
        newCtl.Visible = true;

        newPanel.Controls.Add(newCtl);
    }

    newPanel.Visible = true;

    return newPanel;
}

public static Control CloneControl(Control o)
{
    Type type = o.GetType();
    PropertyInfo[] properties = type.GetProperties();
    Control retObject = (Control) type.InvokeMember("", System.Reflection.BindingFlags.CreateInstance, null, o, null);
    foreach (PropertyInfo propertyInfo in properties)
    {
        if (propertyInfo.CanWrite)
        {
            propertyInfo.SetValue(retObject, propertyInfo.GetValue(o, null), null);
        }
    }
    return retObject;
}
4

2 に答える 2

1

2番目の問題については、System.Designへの参照を追加します。次に、[Deisgner(typeof(ParentControlDesigner)]属性をユーザーコントロールに追加します。これにより、デザイン時にパネルコントロールのように機能します。

于 2009-12-01T05:40:24.750 に答える
-1

そこで、Panelの代わりにUserControlを使用して解決しました。これは、はるかに優れていることがわかりました。

さらに、UserControlコントロールを特定のデザイナーだけでなく、フォーム自体でもデザインすることだけが必要です。しかし、それは問題ではありません、私はそれで生きることができます。

于 2009-11-22T10:04:14.120 に答える