繁体   English   中英

处理多个表单之间的数据

[英]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()会暂停执行并等待调用的窗体关闭。

那边 我建议使用两种其他方式在表单之间进行通信;

  1. 使用全局变量。 在公共模块中的某个地方声明一个保存图形名称的变量。 调用要求用户使用ShowDialog()输入名称的对话框,因为这会暂停执行调用表单,直到被调用表单返回结果为止。

     if(Form.ShowDialog() == DialogResult.OK) { // Save pdf, using title in global variable } 

    确保在Close()-ing之前以调用的形式设置DialogResult。

  2. 将调用表单的实例变量传递给构造函数的被叫名称输入表单并保存。 这样,如果将图形名称属性公开为公共属性,则应该能够从关闭表单的代码中的被调用表单访问它,即:

      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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM