我正在開發一個應用程序,我想包含一些全局功能,例如適用於應用程序包含的每個窗體的幾個按鈕。常規按鈕
這是一個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