2012-10-05 2 views
0

Я пишу свое приложение для мгновенного обмена сообщениями в C#, которое работает на сокетах. Я справился со всеми проблемами сокета, и теперь он работает как IRC. Однако я хочу реализовать частную систему сообщений. У нас есть две формы: одна - основная, вторая - прототип вроде частного сообщения. окно должно выглядеть так. А вот моя проблема:Доступ к экземплярам новой формы C#

string priv_windows, who, msg; 

...

public void createform(string who, string msg) 
{ 
Form2 frm = new Form2(); 
frm.Text = who; 
frm.label1.Text = msg; 
priv_windows += who += " "; 
frm.Show(); 
} 

...

createform("1st instance", "some text"); 
createform("2nd instance", "other text"); 

Это прекрасно работает для создания новых экземпляров формы, однако я не могу найти способ общения с этими дочерними формами, после их создания. Я имею в виду, как я могу, например, изменить текст на экземпляр первой формы? Есть ли простой способ установить индекс или что-то в конкретный экземпляр формы? Пожалуйста, коротко опишите, как использовать его позже.

ответ

0

Если я интерпретирую параметр, у кого есть пустое CreateForm(String, String), вы должны иметь одно личное окно для активного разговора с определенным человеком.

Если это правильно, я бы использовал класс Dictionary (см. MSDN) вместо List, чтобы сохранить ссылку на окно беседы.

Еще одна хорошая вещь - реализовать класс контроллера формы, который имеет фактически статические элементы для управления всеми используемыми формами. Это позволит вам получить доступ к форме Windows в любом месте вашего кода. Если вы не хотите, чтобы каждая часть вашего кода имела к нему доступ, вы можете контролировать доступность, используя пространство имен.

+0

Спасибо. Это был лучший способ. –

0

Вы можете создать список и сохранить свои формы в том, что, например,

private List<Form2> forms = new List<Form2>(); 

public void createform(string who, string msg) 
{  
    Form2 frm = new Form2(); 
    forms.Add(frm); 
    // etc 

Теперь вы можете получить доступ к каждой форме в списке:

foreach (Form2 form in forms) 
{ 
    form.Text = "Hello world"; 
} 
0

Используйте любой набор для хранения и отсылает ваши экземпляры формы

1
public class Form2 : System.Windows.Forms.Form 
{ 
    public System.Windows.Forms.Label label1 = new System.Windows.Forms.Label(); 

    public void Main(string args[]) 
    { 
     Form2 first = createform("1st instance", "some text"); 
     Form2 second = createform("2nd instance", "other text"); 
    } 

    public Form2 createform(string who, string msg) 
    { 
     Form2 frm = new Form2(); 
     frm.Text = who; 
     frm.label1.Text = msg; 
     priv_windows += who += " "; 
     frm.Show(); 
     return frm; 
    } 

    public void SetMessage(string message) 
    { 
     this.label1.Text = message; 
    } 
} 
0

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

string priv_windows, who, msg; 
List<Form> forms = new List<Form>(); 

public void createform(string who, string msg) 
{  
    Form2 frm = new Form2(); 
    frm.Text = who; 
    frm.label1.Text = msg; 
    priv_windows += who += " "; 
    forms.Add(frm); 
    frm.Show(); 
} 

public void ChangeChild() 
{ 
    Form f = forms[0]; 
    f.Text = "New Form Title Text"; 
} 

Это лишь простой пример, который манипулирует первую форму в коллекции, если у вас много вам потребуется более сложный метод определения, какой ВОССТАНОВЛЕНИЕ, который которую вы хотите изменить.

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