Winforms Windows窗体添加动态删除用户控件
我有一个windows窗体应用程序,我要求允许用户在窗体上添加尽可能多的电子邮件ID 我希望能够添加一个功能,为电子邮件ID字段的文本框控制按钮点击。文本框应该动态添加,并且可以在表单上添加N个文本框 同时在任何给定点用户都应该能够删除添加的文本框。单击“保存”按钮后,所有“n”封电子邮件都需要存储在数据库中Winforms Windows窗体添加动态删除用户控件,winforms,dynamic,Winforms,Dynamic,我有一个windows窗体应用程序,我要求允许用户在窗体上添加尽可能多的电子邮件ID 我希望能够添加一个功能,为电子邮件ID字段的文本框控制按钮点击。文本框应该动态添加,并且可以在表单上添加N个文本框 同时在任何给定点用户都应该能够删除添加的文本框。单击“保存”按钮后,所有“n”封电子邮件都需要存储在数据库中 是否有人可以建议如何在Windows窗体应用程序中执行此操作?您可能应该创建一个自定义用户控件来保存您的电子邮件地址并删除按钮。这样,您可以按“删除”按钮删除该电子邮件地址/控件 然后,您
是否有人可以建议如何在Windows窗体应用程序中执行此操作?您可能应该创建一个自定义用户控件来保存您的电子邮件地址并删除按钮。这样,您可以按“删除”按钮删除该电子邮件地址/控件 然后,您希望主窗体有一个按钮来添加电子邮件地址(自定义控件的一个实例),然后有一个FlowLayoutPanel来保存您的客户控件 您的自定义控件代码应类似于:
public class EmailAddressControl : UserControl
{
public string EmailAddress
{
get
{
return(tbEmailTextBox.Text);
}
set
{
tbEmailTextBox.Text = value;
}
}
public EmailAddressControl()
{
InitializeComponent();
}
public event EventHandler<EventArgs> RemoveEmailAddress;
public void btnRemoveEmailAddress_Click(object sender, EventArgs e)
{
RemoveEmailAddress?.Invoke(this, EventArgs.Empty);
}
}
在btnAddEmail\u单击
中,我们正在创建您的EmailAddressControl
的新实例,并订阅removeMailAddress
事件,以便主窗体知道何时删除它。然后,我们将其添加到flpEMailAddresses
面板中
当用户按下btnRemoveEmailAddress
时,它会在RemoveEmailAddress
事件处理程序中触发由主窗体捕获的RemoveEmailAddress
事件。在此处理程序中,我们将发送者对象强制转换为EmailAddressControl
取消订阅RemoveEmailAddress事件(以避免内存泄漏并允许对控件进行垃圾收集),然后从flpEmailAddresses
面板中移除控件,最后处置EmailAddressControl
如果用户单击btnSaveEmails
按钮,则应用程序将在属于flpEmailAddresses
的子项的EmailAddress控件上循环,从每个控件中检索EmailAddress,并将其发送到databaseinstance.SaveEmail
。我将让您自己实现databaseinstance.SaveEmail(stringemailaddress)
public class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
public void btnAddEmail_Click(object sender, EventArgs e)
{
EmailAddressControl email = new EmailAddressControl();
email.RemoveEmailAddress += RemoveEmailAddress;
flpEmailAddresses.Controls.Add(email);
}
public void RemoveEmailAddress(object sender, EventArgs e)
{
EmailAddressControl email = sender as EmailAddressControl;
email.RemoveEmailAddress -= RemoveEmailAddress;
flpEmailAddresses.Controls.Remove(email);
email.Dispose();
email = null;
}
public void btnSaveEmails_Click(object sender, EventArgs e)
{
foreach(EmailAddressControl email in flpEmailAddresses.OfType<EmailAddressControl>())
{
databaseinstance.SaveEmail(email.EmailAddress);
}
}
}