我正在开发一个应用程序,我想包含一些全局功能,例如适用于应用程序包含的每个表单的几个按钮。
它是一个包含四个子窗体的 MDI 应用程序,每个窗体执行不同的任务,每个窗体都有自己的控件。我在每个表单上都有一个清除和搜索按钮,我想做的是创建两个全局按钮,为当前处于活动状态的表单执行这些操作。
例如,Form1 是 MDI 父级,Form2 是 Form1 的子级。我从 Form1 中的 ToolStripMenuItem 调用 Form2,我在 Form2 中有一个按钮,用于清除其中的所有文本框。我想要实现的是将此按钮中的代码移动到放置在 Form1(MDI 父级)的常规栏中的按钮,以便不仅清除 Form2 的文本框,而且清除我的应用程序中的所有表单。
这是我到目前为止所得到的:
//Form1 code
public partial class FrmPrincipal : Form
{
public FrmPrincipal()
{
InitializeComponent();
}
private void manageUsersToolStripMenuItem_Click(object sender, EventArgs e) //Calling Form2
{
FrmUserManager frmusers = new FrmUserManager();
frmusers.MdiParent = this;
frmusers.Show();
}
}
//Form2 code
public partial class FrmUserManager : Form
{
public FrmUserManager()
{
InitializeComponent();
}
}
private void BtnClear_Click(object sender, EventArgs e)
{
Clear(this);
}
private void Clear(Control all)
{
foreach (Control all in all.Controls)
{
if (all is TextBox) ((TextBox)all).Text = string.Empty;
if (all is CheckBox) ((CheckBox)all).Checked = false;
if (all is DataGridView) ((DataGridView)all).DataSource = null;
if (all.Controls.Count > 0) Clear(all);
}
}
所以,基本上我想要的是将此代码移动到 Form1 中的一个按钮,以便从 Form2 外部执行此操作。如果我能做到,我将能够摆脱四个子表单(搜索和清除)中的按钮,并且应用程序将更易于使用。
我想到的唯一方法是将Form2中每个控件上的属性“Modifiers”更改为“public”,以尝试从Form1访问它们,执行以下操作:
Form2 frm2 = new Form2();
if(frm2.Active == true) Clear(this);
在这种情况下,我会实例化每个表单并验证它是否处于活动状态。
它没有显示任何错误,但仍然无法正常工作。我想我知道为什么,为调用 Form2 而创建的对象与此处创建的对象完全不同,因此当前显示的 Form2 与此处引用的对象不同。
有谁明白我想要做什么?