2013-09-17 4 views
0

У меня есть статический класс с именем «MyTestClass» и содержит несколько статических методов и переменных. И в этом классе есть статический метод с именем «AddItemToListView», который отвечает за добавление нового элемента в элемент управления ListView, который находится в имени из «Form1».Как получить доступ к элементам управления C# из статических классов?

Как использовать метод с именем «AddItemToListView» для доступа к элементу управления формой, чтобы добавить эту строку?

Мой вопрос заключается в доступе от элемента управления из статического метода, а не о том, как добавить элемент в виде списка.

Мой метод:

public static void AddToListView(string Serial, string URL, string returnValue) 
    { 
     string[] array = { Serial, URL, returnValue }; 
     ListViewItem listViewItem = new ListViewItem(array); 
     ListViewControl.Items.Add(listViewItem); 
    } 
+0

Статический метод может иметь доступ только к статическим элементам. Он не может получить доступ к нестационарному члену. Элемент управления, который вы пытаетесь получить, принадлежит классу Form1. – Naren

+0

Спасибо за ваш ответ Нарен. Я знаю, что член статики не может получить доступ к нестационарным членам, но я ищу сценарий или логику для этого. –

+0

Вы можете передать Control Form как параметр, чтобы вы могли получить к нему доступ из статического метода. Также посмотрите на [аналогичный сценарий] (http://stackoverflow.com/questions/11906737/accessing-class-member- из-статической-методы) – Naren

ответ

0

Я боролся с этим в течение дня теперь, но думаю, что у меня есть решение.

Вы можете добавить ниже ваш класс, предполагая, что имена управлений являются уникальными возвращают объект управления, который вы хотите управлять из класса:

private static Control GetControl(Form frmToSearch, string controlname) 
{ 
    Control[] rtnControl = frmToSearch.Controls.Find(controlname,true); 
    return rtnControl[0]; 
} 

Usage будет что-то вроде:

Form mainform = new frm_main(); 
Control lblMain = GetControl(mainform, "lblMain"); 

Оттуда контроль должен быть доступен.

Вероятно, лучшее решение, но это казалось мне самым простым.

Собираем в контексте вашего выше примера будет похож на ниже:

public static void AddToListView(string Serial, string URL, string returnValue) 
{ 
    string[] array = { Serial, URL, returnValue }; 
    ListViewItem listViewItem = new ListViewItem(array); 
    Control ListViewControl = GetControl(formReference,"ListviewControlLabel"); 
    ListViewControl.Items.Add(listViewItem); 
} 

Вы должны добавить ссылку на форму с вышеизложенным, однако, что это время дружнее где-то в классе.

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