設計時と実行時に追加されたコントロールが混在するダイアログ フォームがあります。これらの各コントロールは、パネルでホストされます。各パネルには 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 に設定します。これにより、実行時に追加されたコントロールが適切な場所に表示されます。ただし、このソリューションには満足していません。