C# 创建动态按钮

C# 创建动态按钮,c#,winforms,C#,Winforms,我试图在我的应用程序中创建一个动态按钮。所以基本上我有这个代码,但是当我运行它时,我看不到另一个表单的底部。面板是空的。我在第一个表单中单击按钮创建底部,然后它必须在第二个表单的面板中显示按钮 private void btnsend_Click(object sender, EventArgs e) { this.Hide(); Form wrr = new Interface(); wrr.Show(); createnutton(); } int i =

我试图在我的应用程序中创建一个动态按钮。所以基本上我有这个代码,但是当我运行它时,我看不到另一个表单的底部。面板是空的。我在第一个表单中单击按钮创建底部,然后它必须在第二个表单的面板中显示按钮

private void btnsend_Click(object sender, EventArgs e)
{
    this.Hide();
    Form wrr = new Interface();
    wrr.Show();
    createnutton();
}

int i = 0;
int x = 0;

private void createnutton()
{
    Button btn = new Button();
    btn.Location = new Point(3 + i, 14 + x);
    btn.BackColor = System.Drawing.Color.Red;
    btn.ForeColor = System.Drawing.Color.Yellow;
    btn.Text = "Tabel" + libtno.Text;
    btn.Click += new EventHandler(btn_Click);
    panel3.Controls.Add(btn);
    i += 10;
    x += 10;
}

void btn_Click(object sender,EventArgs e)
{
    MessageBox.Show("me");
}

您必须为按钮再设置一个属性“Visible=true”。

您需要一个对所创建接口实例的引用。将
wrr
传递给您的
createnutton
函数。为此,必须将
panel3
的MODIFIERS属性更改为PUBLIC。您也不能引用具有泛型表单类型的表单。它必须是那种特定的形式类型,即
Interface
(顺便说一句,这是一个可怕的名字,因为
Interface
在C#中有不同的含义):

private void btn发送\u单击(对象发送者,事件参数e)
{
this.Hide();
接口wrr=新接口();
wrr.Show();

createnutton(wrr);//您正在将一个新按钮添加到当前表单中的
panel3.Controls
。是否要将这些新控件添加到初始化为
Form wrr=new Interface()的表单中;
?我正在尝试将其添加到另一个具有名称接口的表单中。那么,您必须从新表单的实例中调用该方法。首先,将类名从
接口更改为其他名称(已使用
接口的
名称:)。假设名称为
frmInterface
,则您有
var wrr=new frmInterface();
。订阅表单的
Load
事件,并从
Load
处理程序调用
CreateButton()
(此操作也重命名)。然后您可以从表单中的任何其他位置调用
CreateButton()
(一个
按钮。可能单击
处理程序)这与此无关:当添加到容器中时,默认情况下新控件可见。
BringToFront()
可能是需要的,但OP似乎在尝试完全其他的事情。出于学习的目的,如果您要以自己的方式来做。例如,通过单击旧表单上的按钮来创建动态按钮,以在新表单上创建新按钮。但为什么您首先要动态创建这些按钮?为什么它们不是cre我们需要更多关于“大画面”的信息来帮助您重新设计。因此,我设计了一个pos系统。当项目被添加并且表格没有立即关闭时,会有一个“发送”按钮,它将创建一个动态按钮,用于重新打开表格添加项目或关闭表格
private void btnsend_Click(object sender, EventArgs e)
{
    this.Hide();
    Interface wrr = new Interface();
    wrr.Show();
    createnutton(wrr); // <-- pass "wrr" to the function
}

int i = 0;
int x = 0;

private void createnutton(Interface frmInterface) // <-- parameter added
{
    Button btn = new Button();
    btn.Location = new Point(3 + i, 14 + x);
    btn.BackColor = System.Drawing.Color.Red;
    btn.ForeColor = System.Drawing.Color.Yellow;
    btn.Text = "Tabel" + libtno.Text;
    btn.Click += new EventHandler(btn_Click);
    frmInterface.panel3.Controls.Add(btn); // <-- use the passed in form
    i += 10;
    x += 10;
}