2016-11-17 55 views
0

這可能是重複的,但我無法準確找到我需要的東西。如何從靜態類更新表單?

這裏是我的問題:

我有一個主要形式,從中我建立一些子形式與列表VEW做一些東西在

這是子窗體的代碼:

public partial class AccessGroupForm : Form 
{ 
    public AccessGroupForm() 
    { 
     InitializeComponent(); 
    } 
    public void Fillitems(PackageGroup[] pack) 
    { 
     foreach (var assignment in pack) //filling the listview 
     { 
      list_view.Items.Add(assignment.Name).SubItems.Add(assignment.Id.ToString()); 
     } 
    } 

和靜態加載類這種形式:

public static class AGView 
{ 
    public static void Load(PackageGroup[] pack) 
    { 
     access_group = AG; 
     AccessGroupForm AGform = new AccessGroupForm(); 
     AGform.StartPosition = FormStartPosition.CenterParent; 
     AGform.Fillitems(pack); 
     AGform.ShowDialog(); 
    } 
} 

現在我想有什麼能夠通過這個靜態類在按下按鈕例如更新形式:

private void UpdateMeToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    AGView.UpdateMe() 
} 

如何訪問我與AGView.Load(pack)方法創建完全一樣的形式? 在此先感謝!

+0

重點搜索術語:「C#教程」。靜態類仍然可以有靜態成員。也就是說,定義表單之間的接口並提供它可能會更清晰 - 而不是依賴於外部版主/靜態類。 – user2864740

+0

我會從靜態方法返回創建的表單,將其存儲在*某處*並使用它來管理進一步的更新。 –

回答

0

使用靜態類來控制表單是非常糟糕的做法。因爲只有一個靜態類的「實例」,而表單可以有多個實例。

但是,如果你真的要做到這一點,只是改變這樣靜態類的東西:

public static class AGView 
{  
    private static AccessGroupForm AGform = new AccessGroupForm(); 
    public static void Load(PackageGroup[] pack) 
    { 
     access_group = AG; 
     AGform.StartPosition = FormStartPosition.CenterParent; 
     AGform.Fillitems(pack); 
     AGform.ShowDialog(); 
    } 
} 

現在你可以使用AGForm訪問形式。

但請記住,這是非常糟糕的做法。

+0

謝謝!我知道這有點不好,目前它只是一個快速的工作周。當我有時間去重做它。 – Amarula

+0

@Amarula如果你認爲我的回答對你有幫助,請考慮通過點擊該複選標記來接受它! – Sweeper

0

只需製作表單的靜態實例即可。

public static class AGView 
{  
    private static AccessGroupForm AGform; 
    public static void Load(PackageGroup[] pack) 
    { 
    access_group = AG; 
    AGform = new AccessGroupForm(); 
    AGform.StartPosition = FormStartPosition.CenterParent; 
    AGform.Fillitems(pack); 
    AGform.ShowDialog(); 

    } 
    public static void UpdateMe() 
    { 
     if(AGform != null) 
     { 
      AGform.Update(); 
     } 
    } 
} 

你可以把它再是這樣的:

private void UpdateMeToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    AGView.UpdateMe() 
} 

只要確保處理表單,當你不再需要它!否則,只要程序運行,它就會被分配,因爲它是靜態的。可能使用singleton類而不是靜態類嗎?

+0

非常感謝!去嘗試單身。 – Amarula