2016-11-17 12 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

静的クラスを使用してフォームを制御するのは、非常に悪い習慣です。フォームは複数のインスタンスを持つことができる一方、静的クラスのインスタンスは1つだけであるためです。

しかし、あなた本当にはちょうどこのような何かに静的クラスを変更、これをしたい場合:

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

ありがとう!私はそれがちょっと悪いことを知っています、現在それはちょうど簡単なworkarroundです。私は時間があるときにそれを修正するつもりです。 – 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

関連する問題