我的问题似乎很容易,但实际上非常棘手。我在这里搜索很多,但我找不到任何结论。
我有一个需要经常打开的主变形。我有一个调用form2的按钮,我对它做了一些操作,然后调用一个form3,让用户选择一个项目然后关闭它并返回到mainform。棘手的部分是我需要将数据从f3传递到f1。
我的问题是,在第二种形式上我有下一个&取消按钮(和关闭按钮)。下一步按钮隐藏f2,form1“回来”&打电话给form3。为什么不直接调用form3?因为我需要将数据从form3传递给form1所以我需要从form1调用form3。 所以我想要取消按钮(和关闭按钮)返回到form1而不调用form3。我不确定是什么,所以这是我的代码
public partial class Form1 : Form
{
private void bouya_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.ShowDialog();
Form3 form3 = new Form3(); //it opens when form2 closes!!!
form3.ShowDialog();
string data1 = form3.label2.Text; //the data i need, without calling form3 from here i can't pass data !!!
//do some action with data1
}
}
form2非常简单
public partial class Form2 : Form
{
private void Next_Click(object sender, EventArgs e)
{ this.Hide(); }
private void Cancel_Click(object sender, EventArgs e)
{//i just want here to cancel winform3 to be called}
private void Form2_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{ // Actually this command does'nt work at all i tried
//to put a messagebox.Show("bla") nothing happens but i would like to do the same}
}
并且form3我从列表中选择要发送到form1的项目
public partial class Form3 : Form
{
private void button1_Click(object sender, EventArgs e)
{
foreach (Object obj in listBox1.SelectedItems)
{
label2.Text = obj.ToString();
this.Hide();
}
}
}
好的,对你们中的一些人来说,我的问题似乎毫无用处,我的代码一无所获,但我确实需要这些形式。 (我需要从form1打开form3以将数据3发送到1)
忘掉* Form1 form1 = new Form1();它调用一个新的form1,我不想要它!
答案 0 :(得分:1)
您实际上无需从form3
致电form1
只是为了传递一个值。如果我理解正确,那么所需的流程应该是这样的
form1
opens
form2
opens
form3
|
| value
|
form1 <---+
所以form1
打开form2
会打开form3
,form3
的值应该传回form1
,对吗?
我要做的是在ValuePickedInForm3
中声明属性form2
或其他内容,并在form1
关闭时在form2
中获取此内容。
示例强>
此伪代码位于form2
类
public string ValueFromForm3
{
get;
private set;
}
public void ShowForm3()
{
using (Form3 f3 = new Form3())
{
if (f3.ShowDialog(this) == DialogResult.OK)
ValueFromForm3 = f3.TheValueYouNeed;
}
}
这个伪代码进入form1
类:
public void ShowForm2()
{
using (Form2 f2 = new Form2())
{
if (f2.ShowDialog(this) == DialogResult.OK)
DoSomethingWith(f2.ValueFromForm3);
}
}