C# 未使用PerformClick事件以编程方式创建的控件

C# 未使用PerformClick事件以编程方式创建的控件,c#,winforms,C#,Winforms,我使用的是Windows窗体,我以编程方式创建按钮,如下所示: var button = new Button { Name = "btnJob", Text = "test", }; button.FlatAppearance.BorderSize = 0; button.Click += OnProjectButtonClick; 如您所见,我使用了单击事件,因此在我的单击事件中,我在面板内创建了另一个控件,如: private void OnProjectButtonC

我使用的是
Windows窗体
,我以编程方式创建按钮,如下所示:

var button = new Button
{
    Name = "btnJob",
    Text = "test",
};

button.FlatAppearance.BorderSize = 0;
button.Click += OnProjectButtonClick;
如您所见,我使用了
单击
事件,因此在我的单击事件中,我在面板内创建了另一个控件,如:

private void OnProjectButtonClick(object sender, EventArgs e)
{
    NewContactPanel = new TableLayoutPanel
    {
        AutoSize = true,
        Visible = false
    };

    var lblContactType = new Label
    {
        Name = "lblContactType",
        Text = "Type",
        AutoSize = true,
        Margin = new Padding(15, 10, 0, 0),
    };

    NewContactPanel.Controls.Add(lblContactType, 0, 0);

    CboContactType = new ComboBox
    {
        Name = "cboContactType",
        Width = 130,
        Margin = new Padding(3, 7, 0, 0),
        DropDownStyle = ComboBoxStyle.DropDownList,
    };

    NewContactPanel.Controls.Add(CboContactType, 1, 0);

    var lblNewContactName = new Label
    {
        Name = "lblNewContactName",
        Text = "Name *",
        AutoSize = true,
        Margin = new Padding(15, 10, 0, 0),
    };

    NewContactPanel.Controls.Add(lblNewContactName, 2, 0);
}
它可以正常工作,没有问题,但现在我希望以编程方式执行此单击事件,因此我会执行以下操作:

var firstPanel = tlpJobs.Controls.OfType<TableLayoutPanel>().FirstOrDefault();
var firstButton = firstPanel.Controls.OfType<Button>().FirstOrDefault();
firstButton.PerformClick();
var firstPanel=tlpJobs.Controls.OfType().FirstOrDefault();
var firstButton=firstPanel.Controls.OfType().FirstOrDefault();
firstButton.PerformClick();

所以我用了
click()事件。当我调试时,它会正确地触发事件,按钮也会正确地单击,但控件不会在我的面板中创建。我做错了什么?如果我在同一按钮面板上用鼠标单击,则会正确创建!,为什么不使用PerformClick();?有什么想法吗?

尝试设置
按钮。父属性

Control.Parent
属性


获取或设置控件的父容器。

尝试设置
按钮。父属性

Control.Parent
属性


获取或设置控件的父容器。

您可能应该解释您认为在`NewContactPanel=new TableLayoutPanel{}`行上发生了什么。(显然,您知道如何根据代码的其余部分正确添加控件)因此,该按钮应该是该按钮创建的TableLayoutPanel的子按钮。单击它自己是如何创建的?你有没有想过这个过程的机制及其后果?按钮是什么?创建TableLayoutPanel后单击以查找?新按钮和新控件导致的操作?此外,TableLayoutPanel本身从未添加到现有的父容器控件集合中。无论如何,您不需要PerformClick(),您需要将
OnProjectButtonClick
中的代码移动到一个方法中,这样您就可以从其他任何地方调用此方法,如果需要的话。您可能应该解释一下您认为在`NewContactPanel=newtablelayoutpanel{}`行中发生了什么。(显然,您知道如何根据代码的其余部分正确添加控件)因此,该按钮应该是该按钮创建的TableLayoutPanel的子按钮。单击它自己是如何创建的?你有没有想过这个过程的机制及其后果?按钮是什么?创建TableLayoutPanel后单击以查找?新按钮和新控件导致的操作?此外,TableLayoutPanel本身从未添加到现有的父容器控件集合中。无论如何,您不需要PerformClick(),您需要将
OnProjectButtonClick
中的代码移动到一个方法中,这样您就可以在需要时从任何其他地方调用此方法。