動的フォームを構築している状況があり、ボタンをクリックするといくつかの新しいコントロールを生成する必要があります。ただし、コントロールの各セットには、そのセット内のコントロールのみが表示され、他のコントロールは表示されないことが重要です。そのため、コントロールを保持する別のクラスを作成しようとしましたが、クリックするたびにこのクラスの新しいインスタンスを作成したいと考えています。
私の問題は、それらをフォームに表示する方法ですか?
コントロールを保持するクラスは次のとおりです。
public class CrmCustomerSearchRow
{
public SimpleButton Remove = new SimpleButton();
public LookUpEdit AttributeList = new LookUpEdit();
public LookUpEdit ConditionalList = new LookUpEdit();
public LookUpEdit EnumerableOptions = new LookUpEdit();
public TextEdit NumericEntry = new TextEdit();
private readonly StyleController _style = new StyleController();
private CustomerSearchController _controller = new CustomerSearchController();
public CrmCustomerSearchRow(int rowX, int rowY, CustomerSearchController control) : this(rowX, rowY, control, false){}
public CrmCustomerSearchRow(int rowX, int rowY, CustomerSearchController control, bool firstGo)
{
//Initializers
_controller = control;
Remove = new SimpleButton()
{
Enabled = !firstGo,
Image = Properties.Resources._001_02,
Location = new System.Drawing.Point(rowX, rowY),
Name = "simpleButtonRemove",
Size = new System.Drawing.Size(34, 30),
StyleController = _style
};
AttributeList = new LookUpEdit()
{
Location = new System.Drawing.Point(Remove.Location.X + Remove.Width + 4, rowY),
Name = "lookUpEditAttributeList",
Size = new System.Drawing.Size(102, 20),
StyleController = _style
};
AttributeList.Properties.Buttons.AddRange(new[]
{
new DevExpress.XtraEditors.Controls.EditorButton(
DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)
});
ConditionalList = new LookUpEdit()
{
Location = new System.Drawing.Point(AttributeList.Location.X + AttributeList.Width + 4, rowY),
Name = "lookUpEditConditionalList",
Size = new System.Drawing.Size(50, 20),
StyleController = _style
};
ConditionalList.Properties.Buttons.AddRange(new[]
{
new DevExpress.XtraEditors.Controls.EditorButton(
DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)
});
EnumerableOptions = new LookUpEdit()
{
Location = new System.Drawing.Point(ConditionalList.Location.X + ConditionalList.Width + 4, rowY),
Enabled = false,
Name = "lookUpEditEnumerableOptions",
Size = new System.Drawing.Size(91, 20)
};
ConditionalList.Properties.Buttons.AddRange(new[]
{
new DevExpress.XtraEditors.Controls.EditorButton(
DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)
});
//Datastuffs
AttributeList.Properties.DataSource = _controller.PropertyTypes;
AttributeList.Properties.ValueMember = "AttributeTypeGuid";
AttributeList.Properties.DisplayMember = "AttributeTypeName";
//Event Handlers
Remove.Click += Remove_Click;
AttributeList.EditValueChanged += AttributeList_EditValueChanged;
//Default Visibility and Enabledness
ConditionalList.Enabled = false;
EnumerableOptions.Visible = false;
NumericEntry.Visible = false;
}
そして、それらをフォームに追加しようとする試みは次のとおりです。
private void simpleButtonAddTemplate_Click(object sender, EventArgs e)
{
var oldX = int.Parse(simpleButtonAddTemplate.Location.X.ToString(CultureInfo.InvariantCulture));
var oldY = int.Parse(simpleButtonAddTemplate.Location.Y.ToString(CultureInfo.InvariantCulture));
var newX = oldX + int.Parse(simpleButtonAddTemplate.Size.Height.ToString(CultureInfo.InvariantCulture)) + 4;
var newY = oldY;
Rows.Add(
new CrmCustomerSearchRow(oldX, oldY, _controller));
simpleButtonAddTemplate.Location = new Point(newX, newY);
}