[英]Handling data between multiple Forms
我正在研究一个生成PDF文件的程序。 在最终生成文件之前,我想给用户一个选项来编辑文件的一部分(即将创建的图形的标题)。 我希望当用户单击按钮以导出PDF时以新的形式显示。 这是我要做什么的概述...
private void button4_Click(object sender, EventArgs e) // Test PDF Code!
{
Form2 NewPDF = new Form2(chart3.Titles[chart3.Titles.IndexOf("Header")].Text.ToString().Substring(0, chart3.Titles[chart3.Titles.IndexOf("Header")].Text.ToString().Length - 4));
NewPDF.Show();
if (NewPDF.Selected == true)
{
// Create PDF, open save file dialog, etc
}
}
这是通过此按钮单击打开的窗体。
public partial class Form2 : Form
{
public bool Selected
{
get;
set;
}
public String GraphName
{
get;
set;
}
public Form2(String FileName)
{
InitializeComponent();
textBox1.Text = FileName;
GraphName = FileName;
Selected = false;
}
public void button1_Click(object sender, EventArgs e)
{
GraphName = textBox1.Text;
this.Selected = true; // After the button is selected I want the code written above to continue execution, however it does not!
}
}
到目前为止,当我单击Form2中的按钮时,什么都没有发生,这是我不了解的关于两个Forms之间通信的信息!
您问题的答案很简单。
NewPDF.Show();
Show()不会暂停调用表单的执行。 因此,如果选择的属性为true,则验证其下方的检查将永远不会正确执行,因为在表单开始显示时,已达到并验证了该检查。 ShowDialog()会暂停执行并等待调用的窗体关闭。
那边 我建议使用两种其他方式在表单之间进行通信;
使用全局变量。 在公共模块中的某个地方声明一个保存图形名称的变量。 调用要求用户使用ShowDialog()输入名称的对话框,因为这会暂停执行调用表单,直到被调用表单返回结果为止。
if(Form.ShowDialog() == DialogResult.OK) { // Save pdf, using title in global variable }
确保在Close()-ing之前以调用的形式设置DialogResult。
将调用表单的实例变量传递给构造函数的被叫名称输入表单并保存。 这样,如果将图形名称属性公开为公共属性,则应该能够从关闭表单的代码中的被调用表单访问它,即:
public void button1_Click(object sender, EventArgs e) { callingFormInstance.GraphNameProperty = textBox1.Text; Close(); }
希望能有所帮助。 干杯!
您应该像下面那样更改Form2.GraphName
public String GraphName
{
get { return textBox1.Text }
}
然后更改您的新Form2创建,如下所示,进行测试,因为我还没有通过VS运行它,但是应该可以正常工作:)
private void button4_Click(object sender, EventArgs e) // Test PDF Code!
{
// why on earth were you doing .Text.ToString()? it's already string...
Form2 NewPDF = new Form2(chart3.Titles[chart3.Titles.IndexOf("Header")].Text.Substring(0, chart3.Titles[chart3.Titles.IndexOf("Header")].Text.Length - 4));
// show as a dialog form, so it will wait for it to exit, and set this form as parent
NewPDF.ShowDialog(this);
if (NewPDF.Selected == true)
{
// get the name from the other form
string fileName = NewPDF.GraphName;
// Create PDF, open save file dialog, etc
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.