winforms 如何在C#中在表单之间切换时不丢失数据

zengzsys  于 2023-06-24  发布在  C#
关注(0)|答案(2)|浏览(166)

我目前正试图有一个弹出的形式,当我点击一个按钮,它弹出。当它这样做时,你输入你的信息,然后发送回来。
请注意,可能会有一些错误,因为它不是复制和粘贴。我只包括了重要的代码
表1:

namespace estController
{
public partial class MainForm : Form
{
    string Tempcustomer = "";
    string TempManager = "";
    string TempManagerId = "";
    string TempName = "";
    string TempProjectId = "";
    string TempSharePointID = "";
    string Tempstatus = "";

    private void buttonBegin_Click(object sender, EventArgs e)
    {
        if(ManualEnterNumber.Checked)
        {
            buttonBegin.Enabled = false;
            Manual_Input F2 = new Manual_Input();

            F2.Show();

        }
    }

    private void buttonNext_Click(object sender, EventArgs e)
    {
         MessageBox.Show("test" + TempName);
    }

    internal void receiveData(string boxCustomer, string boxManager, string boxManagerId, string      boxName, string boxProjectId, string boxSharePointId, string boxStatus)
    {
        Tempcustomer = boxCustomer;
        TempManager = boxManager;
        TempManagerId = boxManagerId;
        TempName = boxName;
        TempProjectId = boxProjectId;
        TempSharePointID = boxSharePointId;
        Tempstatus = boxStatus;
    }
}
}

表2:

namespace estController
{
public partial class Manual_Input : Form
{

    private void buttonEnter_Click(object sender, EventArgs e)
    {
        MainForm Form = new MainForm();

        Form.receiveData(boxCustomer.Text, boxManager.Text, boxManagerId.Text, boxName.Text, boxProjectId.Text, boxSharePointId.Text, boxStatus.Text);
        

        this.Close();
    }
}
}

我希望发生的是点击开始按钮。当这种情况发生时,表单2打开,我输入所需的数据。接下来,我点击按钮发送数据,然后关闭表单。数据应该保存在form1开始时初始化的变量中。最后,我可以点击下一步按钮,检查数据是否存在。
当单步执行代码时,我可以看到数据被分配,但当我点击Next按钮时,数据就消失了。

33qvvth1

33qvvth11#

这是在创建MainFormnew 示例:

MainForm Form = new MainForm();

该示例与您刚才来自的示例不相同。考虑一个类比:
一辆汽车从装配线上下线。你打开后备箱放点东西进去。过了一会儿,另一辆车从装配线上下线。这辆车在各方面都和第一辆车一模一样。当你打开第二辆车的后备箱时,你会看到你在第一辆车的后备箱里放了什么吗?
在创建Manual_Input的示例时,可以传递对该对象的引用。例如,将以下构造函数添加到Manual_Input

private MainForm _mainForm;

public Manual_Input(MainForm mainForm)
{
    InitializeComponent();
    _mainForm = mainForm;
}

这将要求新创建的Manual_Input示例需要引用MainForm,因为它们在内部依赖MainForm来执行任务。创建示例时传递该引用:

Manual_Input F2 = new Manual_Input(this);
F2.Show();

然后,您可以在执行Manual_Input中的逻辑时使用该引用:

private void buttonEnter_Click(object sender, EventArgs e)
{
    _mainForm.receiveData(boxCustomer.Text, boxManager.Text, boxManagerId.Text, boxName.Text, boxProjectId.Text, boxSharePointId.Text, boxStatus.Text);
    this.Close();
}
oxiaedzo

oxiaedzo2#

这不是一个直接的答案,但是,可能有更干净的方法来共享公共资源和引用依赖关系。
Project.cs

namespace WinFormsApp2
{
    public class Project
    {
        public string Tempcustomer { get; set; }
        public string TempManager { get; set; }
        public string TempManagerId { get; set; }
        public string TempName { get; set; }
        public string TempProjectId { get; set; }
        public string TempSharePointID { get; set; }
        public string Tempstatus { get; set; }
    }
}

Form1.cs

namespace WinFormsApp2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            var project = Form2.EditProject();
            if(project != null)
            {
                MessageBox.Show("Project Edited");
            }
            else
            {
                MessageBox.Show("Project Not Edited");
            }
        }
    }

    
}

Form2.cs

namespace WinFormsApp2
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }        

        private void btnOK(object sender, EventArgs e)
        {
            DialogResult = DialogResult.OK;
            this.Close();
        }

        private void btnCancel(object sender, EventArgs e)
        {
            DialogResult = DialogResult.Cancel;
            this.Close();
        }
                  
        public static Project? EditProject()
        {                
            if(new Form2.ShowDialog() != DialogResult.OK);
               return null;

            return new Project
            {
                Tempcustomer = "Hey!"// txtCustomer.Text;
            };            
        }
    }
}

相关问题