我正在编写C#中的即时消息应用程序,它适用于套接字。我管理了所有套接字问题,它现在就像一个IRC。但是,我想实现私人消息系统。我们有两种形式 - 一种是主要形式,第二种形式是类似私人消息的原型。窗口应该看起来像。这是我的问题:
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 :(得分: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;
}
}
答案 1 :(得分: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";
}
答案 2 :(得分:0)
使用任何集合来存储和引用表单实例
答案 3 :(得分: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";
}
这只是一个操作集合中第一个Form的简单示例,如果你有很多,你需要一个更复杂的方法来确定哪个检索你想要改变哪个。
答案 4 :(得分:0)
如果我将参数who CreateForm(String, String)
解释为正确,那么您希望每个与某个人的活动对话都有一个私人窗口。
如果这是正确的,我会使用课程Dictionary
(有关详细信息,请参阅MSDN)而不是List
来保存对话窗口的引用。
另一个好处是,实现一个表单控制器类,它实际上有静态成员来管理所有使用过的表单。这将允许您在代码中的任何位置访问Windows窗体。如果您不希望代码的每个部分都可以访问它,则可以使用命名空间来控制可访问性。
答案 5 :(得分:0)
我建议您使用event aggregator与域中的对象进行通信。