我正在开发一个应用程序,我想包含一些全局功能,例如适用于应用程序包含的每个窗体的几个按钮。常规按钮
这是一个MDI应用程序,其中包含四个子窗体,每个窗体执行不同的任务,并且每个窗体都有自己的控件。我在每个表单上都有一个Clear and Search按钮,我想要做的是创建两个全局按钮,为当前处于活动状态的表单执行这些操作。
例如,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中的按钮从窗体2之外执行此操作。如果我可以做到这一点,我将能够摆脱四个子窗体中的按钮(搜索和清除),此外,该应用程序将更易于使用。
我想到的唯一方法是改变财产“调节器”在Form2的每个控件“公共”,试图从Form1上访问它们做这样的事情:
Form2 frm2 = new Form2();
if(frm2.Active == true) Clear(this);
在这种情况下, ,我会实例化每个表单并验证它是否处于活动状态。
它没有显示任何错误,但仍然不起作用。我想我知道为什么,调用Form2创建的对象是与此处创建的对象完全不同的对象,因此当前显示的Form2与此处引用的Form2不同。
有没有人明白我想要做什么?
对不起,但我不得不说。 MDI是有史以来最糟糕的UI想法。 – 2013-03-05 17:38:19
@HighCore您在WinForm类别中持续的拖曳评论不是很有帮助。随意将WinForm标签添加到Stack Overflow首页的Ignore列表中。 – LarsTech 2013-03-05 17:50:19
@LarsTech我没有倒下任何东西。我通常不这样做。你今天可以看看我的代表数据,看看没有降薪。另外,我必须承认我的评论有时可能会令人讨厌。我只是想把这些人叫醒。 – 2013-03-05 18:04:33