我有两个表单(Form1和Form2),我希望在Form1上的一个进程完成后传递一串字符。
在Form1上,有一个文本框,我想用这个字符串更新。在Form2上,我有一个列表框,其中包含在完成每个进程后最终将加载到Form1上的此文本框中的值。基本上我要做的是排队将放置在Form1上的文本框中的下一个字符串。
我已尝试在Form2中创建公共属性,如下所示:
public string NextString { get { return ListBox1.Items[ListBox1.TopIndex].ToString(); } }
然后,在Form1中:
Form2 frm = new Form2();
string next = frm.NextString;
TextBox1.Text = next;
并且presto。除外。不幸的是,这对我不起作用。我做了一些研究,发现这种方法不是最好的做法,并且认为使用事件处理程序是更实用的方法。所以我研究了那些。我知道我必须创建一个新的EventArgs类,一个新的公共事件,一个触发方法,我想要处理的事件,然后是Form1中的处理程序方法。 This post is where I read into that.
我一直在操纵答案以满足我的需要:
public class StringEventArgs : EventArgs
{
public string NextString { get; set; }
public StringEventArgs(string data)
{
NextString = data;
}
}
新活动:
public event EventHandler<ListEventArgs> NewFileAdded;
这是我迷路的地方。我很难理解现在发生了什么。如果有人能帮助我完成我想做的事情,我将非常感激!
答案 0 :(得分:2)
无需创建自己的Args类。您可以使用Form2订阅的Action
来完成此操作。
类似的东西:
public class Form1
{
private Form2 _form2;
public event Action<string> NextStringChanged;
public class Form1()
{
_form2 = new Form2(this);
}
private void LongProcess()
{
_form2.Show();
// do long process
if (NextStringChanged != null)
{
NextStringChanged.Invoke(ListBox1.Items[ListBox1.TopIndex].ToString());
}
}
}
public class Form2
{
public class Form2(Form1 form1)
{
form1.NextStringChanged += OnNextStringChanged;
}
private void OnNextStringChanged(string value)
{
// Update WPF user control here
}
}
答案 1 :(得分:0)
有多种方法可以在不同的表单之间传递数据,请查看:
==
public string NextString { get { return ListBox1.Items[ListBox1.TopIndex].ToString(); } }
P.S。您可能必须为Form2使用不同的索引号,因为我不确定它在您的应用中的确切位置。