访问新的表单实例 c#



我正在用C#编写一种即时消息应用程序,该应用程序适用于套接字。我管理了所有套接字问题,它现在的工作方式类似于 IRC。但是,我想实现私人消息系统。我们有 2 种形式 - 一种是主要的,第二种是像私人味精一样的原型。 窗口应该看起来像。这是我的问题:

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");

这对于创建新的表单实例非常有效,但是在创建这些子表单后,我找不到与这些子表单进行通信的方法。我的意思是,例如,我如何更改第一个表单实例上的文本?有没有一种简单的方法,为特定的表单实例设置索引或其他东西?请稍后简要描述如何使用它。

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;
    }
}
如果我正确

解释参数 who'of void CreateForm(String, String)正确,您希望每次与某个人进行活动对话都有一个私人窗口。

如果这是正确的,我将使用类Dictionary(有关详细信息,请参阅 MSDN)而不是List来保存对对话窗口的引用。

另一个好处是实现一个表单控制器类,该类实际上具有静态成员来管理所有使用的表单。这将允许您在代码中的任何位置访问窗口窗体。如果不希望代码的每个部分都可以访问它,则可以使用命名空间来控制可访问性。

您可以创建一个列表并将表单保留在其中,例如,

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";
}

使用任何集合来存储和引用表单实例

你需要保留对它的引用,可以用来与他们"交流"。例如,像字符串之类的私有变量:

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";
}

这只是一个简单的示例,用于操作集合中的第一个 Form,如果您有多个窗体,则需要一种更复杂的方法来确定要更改哪个 Form。

我建议使用事件聚合器与域中的对象进行通信。

相关内容

  • 没有找到相关文章

最新更新