为什么我的控件中只有一个被添加到此表单中?

时间:2014-01-08 21:31:05

标签: c# winforms controls

我正在开发一个调试应用程序,我正在构建一个表单(基于System.Windows.Form的一个非常小的扩展),该表单用于构造函数并为每个参数创建一个新的Parameter控件在构造函数中。

我目前的问题是,由于某种原因,我的ParameterControls正被添加到表单中,但只有添加的第一个才会在操作结束时显示。

有问题的代码和支持方法;如下:

class ConstructorDialog : Namespace.Forms.Form
{
    protected void InitializeInterface()
    {
        if (this.TargetType == null)
        {
            throw new InvalidOperationException("Cannot GenerateFields for ConstructorDialog. ConstructorDialog TargetType is null.");
        }
        else if (this.TargetConstructor == null)
        {
        }
        else
        {
            foreach( ParameterInfo Parameter in this.TargetConstructor.GetParameters())
            {
                try
                {
                    ParameterControl NewParameterControl = new ParameterControl(Parameter);
                    NewParameterControl.Location = new Point(0, 30 + (30 * Parameter.Position));
                    this.AddControl(NewParameterControl);
                    continue;
                }
                catch (Exception e)
                {
                }
            }
            return;
        }
    }
}

class Namespace.Forms.Form : System.Windows.Forms.Form
{
    public Control AddControl(Control Control)
    {
        if (Control == null)
            throw new InvalidOperationException("Form cannot AddControl. Control is null.");
        else
        {
            this.Controls.Add(Control);
            return Control;
        }
    }
}


class Namespace.Debugging.ParameterControl : Namespace.Forms.UserControl
{
    protected void InitializeInterface()
    {
        if (this.TargetParameter == null)
        {
            throw new InvalidOperationException("Cannot InitializeInterface for ConstructorParameterControl. ConstructorParameterControl TargetParameter is null.");
        }
        else
        {
            this.Controls.Clear();

            this.AddLabel(this.TargetParameter.Name + "_Label", this.TargetParameter.Name, new Point(25,0));

            return;
        }
    }
}

class Namespace.Forms.UserControl : System.Windows.Forms.UserControl
{
    public Label AddLabel(String LabelName, String LabelText, Point Location)
    {
        if (String.IsNullOrEmpty(LabelName))
            throw new ArgumentNullException();
        else if (String.IsNullOrEmpty(LabelText))
            throw new ArgumentNullException();
        else
        {
            Label NewLabel = new Label();

            NewLabel.Name = LabelName;
            NewLabel.Text = LabelText;
            NewLabel.Location = Location;

            return this.AddLabel(NewLabel);
        }
    }

    public Label AddLabel(Label Label)
    {
        if (Label == null)
            throw new ArgumentNullException();
        else
        {
            this.Controls.Add(Label);
            return Label;
        }
    }
}

我的表格扩展仍处于起步阶段,所以我很可能忽略了某些事情(特别是因为我的表格知识只是学徒值得的),但这个操作看起来很简单,在我的评估中应该有效。

一些调试信息:

The controls are being added to the base 'Controls' collection.
The positions of the controls are being set to what they ought to, so it is not a matter of them overlapping.
No exceptions are encountered during execution.

1 个答案:

答案 0 :(得分:1)

正如@sysexpand所建议的那样,我手动设置ParameterControl对象的高度和宽度,并将'Visible'属性设置为true,似乎已经解决了问题。

我对此的评估是,在ParameterControl是其父项的成员之前设置这些变量,当控件添加到其父项时,这些变量将被覆盖。