1

設計時と実行時に追加されたコントロールが混在するダイアログ フォームがあります。これらの各コントロールは、パネルでホストされます。各パネルには FillStyle.Top セットがあります。

実行時に、UserControl をパネルに追加します。

public NetworkDiscoveryDialog(CSNetworkDiscovery networkDiscovery) : this()
{
    NetworkDiscovery = networkDiscovery;
    SnmpCommunitiesUserControl = new SnmpCommunitiesUserControl(NetworkDiscovery.SnmpCommunitiesSetting);
    panel2.Controls.Add(SnmpCommunitiesUserControl);
}

public partial class SnmpCommunitiesUserControl : UserControl
{
    public SnmpSetting SnmpSetting { get; set; }

    public SnmpCommunitiesUserControl()
    {
        InitializeComponent();
        Anchor = (AnchorStyles.Top | AnchorStyles.Left);
        Dock = DockStyle.Fill;
    }

    public SnmpCommunitiesUserControl(SnmpSetting snmpSetting)
        : this()
    {
        SnmpSetting = snmpSetting;
    }
}

残念ながら、SnmpCommunitiesUserControl は、設計時に追加されたコントロールと同じ位置にありません。

私が試してみました:

  • パネルのマージンとパディングを設定します。
  • UserControl の余白とパディングを設定します。
  • アンカーとドックの設定。

これらのどれも、実行時に追加された UserControl に影響を与えないようです。

以前は、'Location' パラメーターを UserControl のコンストラクターに渡していました。これにより、UserControl の場所を設定できましたが、保守可能なソリューションではありませんでした。

これを行うにはどうすればよいですか?

編集:

私の現在の解決策は、最初のパネルの中に 2 番目のパネルをネストすることです。両方のパネルのマージンとパディングをすべてクリアします。親パネルには Dock.Top があり、その子には Dock.Fill があります。次に、子の左/右パディングを 10 に設定します。これにより、実行時に追加されたコントロールが適切な場所に表示されます。ただし、このソリューションには満足していません。

ここに画像の説明を入力

4

2 に答える 2

1

絶対位置を設定する場合は、Locationプロパティを自分の位置に設定し、dockをnoneに設定する必要があります。
control.Location = new Point(x, y);
control.Dock = DockStyle.None;

于 2012-06-01T11:49:24.020 に答える
1

Location プロパティと Size プロパティを自分で設定するか、新しいコントロールの Dock プロパティを設定する必要があります。もう 1 つの方法は、ホスト パネルを StackLayoutPanel または TableLayoutPanel に変更することです。

于 2012-05-31T17:11:34.037 に答える