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

Смежные вопросы