Windows应用程序(C#.Net)-保留文本框值

Windows应用程序(C#.Net)-保留文本框值,c#,winforms,C#,Winforms,下面是我的场景:(Windows应用程序/C#.Net) 我有一个Form1,它正在做一些计算,选择选项作为案例1,点击按钮,它会将所有文本框值推送到Form2。这很好用 现在,如果我再次来到表格1,将选项更改为案例2,计算并按下按钮,它将删除先前添加的值 我想保留这些值,并将这些值添加到Form2中的另一组文本框中 代码:单击“添加”按钮后,在表格1中: private void button1_Click(object sender, EventArgs e) { F

下面是我的场景:(Windows应用程序/C#.Net)

我有一个Form1,它正在做一些计算,选择选项作为案例1,点击按钮,它会将所有文本框值推送到Form2。这很好用

现在,如果我再次来到表格1,将选项更改为案例2,计算并按下按钮,它将删除先前添加的值

我想保留这些值,并将这些值添加到Form2中的另一组文本框中

代码:单击“添加”按钮后,在表格1中:

private void button1_Click(object sender, EventArgs e)
    {
        Form2 eigthForm = new Form2();
        if(comboBox1.Text == "Case 1")
        {
            eigthForm.text2.Text = textBox1.Text;
            eigthForm.text3.Text = textBox8.Text;
        }   
        if (comboBox1.Text == "Case 2")
        {
            eigthForm.text4.Text = textBox1.Text;
            eigthForm.text5.Text = textBox8.Text;
        }

好的,我明白你现在的要求。您可以按如下方式使用Singleton模式

Form1按钮

private void button1_Click(object sender, EventArgs e)
{
    Form2.Instance.AddText1and2("Hello", "World");
}

private void button2_Click(object sender, EventArgs e)
{
    Form2.Instance.AddText3("Foo");
}
表2我们将改为单例模式

   private static volatile Form2 instance = null;
    private static object lockThis = new object();

    private Form2()
    {
        InitializeComponent();
    }

    public static Form2 Instance
    {
        get
        {
            if (instance == null)
            {
                lock(lockThis)
                {
                    if (instance == null)
                    {
                        instance = new Form2();
                    }
                }
            }
            return instance;
        }
    }
现在我们的方法是将文本放置在正确的位置

public void AddText1and2(string txt1, string txt2)
    {
        textBox1.Text = txt1;
        textBox2.Text = txt2;
        this.Show();
    }

    public void AddText3(string txt3)
    {
        textBox3.Text = txt3;
        this.Show();
    }
如果希望能够关闭窗口并重新打开它以保存值,则需要使用表单关闭事件

private void Form2_FormClosing(object sender, FormClosingEventArgs e)
    {
        this.Hide();
        e.Cancel = true;
    }
您必须防止实际关闭。这将处理对象,我们不希望这样

这将在表格2中保留您的所有设置


如果不想执行上述操作,可以向项目中添加一个新类,如下所示

class Global
{
    public static string Value1 { get; set; }
    public static string Value2 { get; set; }
}
if(comboBox1.Text.Equals("Case 1"))
{
}
else if (comboBox1.Text.Equals("Case 2"))
{
}
表格一

if(comboBox1.Text == "Case 1")
{
        Global.Value1 = textBox1.Text;
        Global.Value2 = textBox8.Text;
}   
在Form2加载事件中

text2.Text = Global.Value1;
text3.Text = Global.Value2;

您还应该修改if逻辑 如果是“案例1”,组合框将永远不会==“案例2”,但您 仍在运行下一个if语句

你应该用这样的东西

class Global
{
    public static string Value1 { get; set; }
    public static string Value2 { get; set; }
}
if(comboBox1.Text.Equals("Case 1"))
{
}
else if (comboBox1.Text.Equals("Case 2"))
{
}


好的,我明白你现在的要求。您可以按如下方式使用Singleton模式

Form1按钮

private void button1_Click(object sender, EventArgs e)
{
    Form2.Instance.AddText1and2("Hello", "World");
}

private void button2_Click(object sender, EventArgs e)
{
    Form2.Instance.AddText3("Foo");
}
表2我们将改为单例模式

   private static volatile Form2 instance = null;
    private static object lockThis = new object();

    private Form2()
    {
        InitializeComponent();
    }

    public static Form2 Instance
    {
        get
        {
            if (instance == null)
            {
                lock(lockThis)
                {
                    if (instance == null)
                    {
                        instance = new Form2();
                    }
                }
            }
            return instance;
        }
    }
现在我们的方法是将文本放置在正确的位置

public void AddText1and2(string txt1, string txt2)
    {
        textBox1.Text = txt1;
        textBox2.Text = txt2;
        this.Show();
    }

    public void AddText3(string txt3)
    {
        textBox3.Text = txt3;
        this.Show();
    }
如果希望能够关闭窗口并重新打开它以保存值,则需要使用表单关闭事件

private void Form2_FormClosing(object sender, FormClosingEventArgs e)
    {
        this.Hide();
        e.Cancel = true;
    }
您必须防止实际关闭。这将处理对象,我们不希望这样

这将在表格2中保留您的所有设置


如果不想执行上述操作,可以向项目中添加一个新类,如下所示

class Global
{
    public static string Value1 { get; set; }
    public static string Value2 { get; set; }
}
if(comboBox1.Text.Equals("Case 1"))
{
}
else if (comboBox1.Text.Equals("Case 2"))
{
}
表格一

if(comboBox1.Text == "Case 1")
{
        Global.Value1 = textBox1.Text;
        Global.Value2 = textBox8.Text;
}   
在Form2加载事件中

text2.Text = Global.Value1;
text3.Text = Global.Value2;

您还应该修改if逻辑 如果是“案例1”,组合框将永远不会==“案例2”,但您 仍在运行下一个if语句

你应该用这样的东西

class Global
{
    public static string Value1 { get; set; }
    public static string Value2 { get; set; }
}
if(comboBox1.Text.Equals("Case 1"))
{
}
else if (comboBox1.Text.Equals("Case 2"))
{
}


好的,我明白你现在的要求。您可以按如下方式使用Singleton模式

Form1按钮

private void button1_Click(object sender, EventArgs e)
{
    Form2.Instance.AddText1and2("Hello", "World");
}

private void button2_Click(object sender, EventArgs e)
{
    Form2.Instance.AddText3("Foo");
}
表2我们将改为单例模式

   private static volatile Form2 instance = null;
    private static object lockThis = new object();

    private Form2()
    {
        InitializeComponent();
    }

    public static Form2 Instance
    {
        get
        {
            if (instance == null)
            {
                lock(lockThis)
                {
                    if (instance == null)
                    {
                        instance = new Form2();
                    }
                }
            }
            return instance;
        }
    }
现在我们的方法是将文本放置在正确的位置

public void AddText1and2(string txt1, string txt2)
    {
        textBox1.Text = txt1;
        textBox2.Text = txt2;
        this.Show();
    }

    public void AddText3(string txt3)
    {
        textBox3.Text = txt3;
        this.Show();
    }
如果希望能够关闭窗口并重新打开它以保存值,则需要使用表单关闭事件

private void Form2_FormClosing(object sender, FormClosingEventArgs e)
    {
        this.Hide();
        e.Cancel = true;
    }
您必须防止实际关闭。这将处理对象,我们不希望这样

这将在表格2中保留您的所有设置


如果不想执行上述操作,可以向项目中添加一个新类,如下所示

class Global
{
    public static string Value1 { get; set; }
    public static string Value2 { get; set; }
}
if(comboBox1.Text.Equals("Case 1"))
{
}
else if (comboBox1.Text.Equals("Case 2"))
{
}
表格一

if(comboBox1.Text == "Case 1")
{
        Global.Value1 = textBox1.Text;
        Global.Value2 = textBox8.Text;
}   
在Form2加载事件中

text2.Text = Global.Value1;
text3.Text = Global.Value2;

您还应该修改if逻辑 如果是“案例1”,组合框将永远不会==“案例2”,但您 仍在运行下一个if语句

你应该用这样的东西

class Global
{
    public static string Value1 { get; set; }
    public static string Value2 { get; set; }
}
if(comboBox1.Text.Equals("Case 1"))
{
}
else if (comboBox1.Text.Equals("Case 2"))
{
}


好的,我明白你现在的要求。您可以按如下方式使用Singleton模式

Form1按钮

private void button1_Click(object sender, EventArgs e)
{
    Form2.Instance.AddText1and2("Hello", "World");
}

private void button2_Click(object sender, EventArgs e)
{
    Form2.Instance.AddText3("Foo");
}
表2我们将改为单例模式

   private static volatile Form2 instance = null;
    private static object lockThis = new object();

    private Form2()
    {
        InitializeComponent();
    }

    public static Form2 Instance
    {
        get
        {
            if (instance == null)
            {
                lock(lockThis)
                {
                    if (instance == null)
                    {
                        instance = new Form2();
                    }
                }
            }
            return instance;
        }
    }
现在我们的方法是将文本放置在正确的位置

public void AddText1and2(string txt1, string txt2)
    {
        textBox1.Text = txt1;
        textBox2.Text = txt2;
        this.Show();
    }

    public void AddText3(string txt3)
    {
        textBox3.Text = txt3;
        this.Show();
    }
如果希望能够关闭窗口并重新打开它以保存值,则需要使用表单关闭事件

private void Form2_FormClosing(object sender, FormClosingEventArgs e)
    {
        this.Hide();
        e.Cancel = true;
    }
您必须防止实际关闭。这将处理对象,我们不希望这样

这将在表格2中保留您的所有设置


如果不想执行上述操作,可以向项目中添加一个新类,如下所示

class Global
{
    public static string Value1 { get; set; }
    public static string Value2 { get; set; }
}
if(comboBox1.Text.Equals("Case 1"))
{
}
else if (comboBox1.Text.Equals("Case 2"))
{
}
表格一

if(comboBox1.Text == "Case 1")
{
        Global.Value1 = textBox1.Text;
        Global.Value2 = textBox8.Text;
}   
在Form2加载事件中

text2.Text = Global.Value1;
text3.Text = Global.Value2;

您还应该修改if逻辑 如果是“案例1”,组合框将永远不会==“案例2”,但您 仍在运行下一个if语句

你应该用这样的东西

class Global
{
    public static string Value1 { get; set; }
    public static string Value2 { get; set; }
}
if(comboBox1.Text.Equals("Case 1"))
{
}
else if (comboBox1.Text.Equals("Case 2"))
{
}

这里有一个选择

Form2 inst = null;
private void button1_Click(object sender, EventArgs e)
    {
        if(inst == null)
           inst = new Form2();


        if(comboBox1.Text == "Case 1")
        {
            inst.text2.Text = textBox1.Text;
            inst.text3.Text = textBox8.Text;
        }   
        if (comboBox1.Text == "Case 2")
        {
            inst.text4.Text = textBox1.Text;
            inst.text5.Text = textBox8.Text;
        }

 inst.Show();

}
这里有一个选择

Form2 inst = null;
private void button1_Click(object sender, EventArgs e)
    {
        if(inst == null)
           inst = new Form2();


        if(comboBox1.Text == "Case 1")
        {
            inst.text2.Text = textBox1.Text;
            inst.text3.Text = textBox8.Text;
        }   
        if (comboBox1.Text == "Case 2")
        {
            inst.text4.Text = textBox1.Text;
            inst.text5.Text = textBox8.Text;
        }

 inst.Show();

}
这里有一个选择

Form2 inst = null;
private void button1_Click(object sender, EventArgs e)
    {
        if(inst == null)
           inst = new Form2();


        if(comboBox1.Text == "Case 1")
        {
            inst.text2.Text = textBox1.Text;
            inst.text3.Text = textBox8.Text;
        }   
        if (comboBox1.Text == "Case 2")
        {
            inst.text4.Text = textBox1.Text;
            inst.text5.Text = textBox8.Text;
        }

 inst.Show();

}
这里有一个选择

Form2 inst = null;
private void button1_Click(object sender, EventArgs e)
    {
        if(inst == null)
           inst = new Form2();


        if(comboBox1.Text == "Case 1")
        {
            inst.text2.Text = textBox1.Text;
            inst.text3.Text = textBox8.Text;
        }   
        if (comboBox1.Text == "Case 2")
        {
            inst.text4.Text = textBox1.Text;
            inst.text5.Text = textBox8.Text;
        }

 inst.Show();

}


发布一些代码。嗨,马特,发布代码。请看一下代码并提出解决方案。谢谢。每次单击按钮时,您都在创建Form2的新实例。它将不会保留这些值,因为它是一个新实例。拥有一个全局对象(静态)来保存您的所有值将是一个很好的起点。像那样公开文本框不是一个好主意。关于全球事物的一些想法,请参见Tsukasa答案。发布一些代码。Hi Matt,发布代码。请看一下代码并提出解决方案。谢谢。每次单击按钮时,您都在创建Form2的新实例。它将不会保留这些值,因为它是一个新实例。拥有一个全局对象(静态)来保存您的所有值将是一个很好的起点。像那样公开文本框不是一个好主意。关于全球事物的一些想法,请参见Tsukasa答案。发布一些代码。Hi Matt,发布代码。请看一下代码并提出解决方案。谢谢。每次单击按钮时,您都在创建Form2的新实例。它将不会保留这些值,因为它是一个新实例。拥有一个全局对象(静态)来保存您的所有值将是一个很好的起点。像那样公开文本框不是一个好主意。关于全球事物的一些想法,请参见Tsukasa答案。发布一些代码。Hi Matt,发布代码。请看一下代码并提出解决方案。谢谢。每次单击按钮时,您都在创建Form2的新实例。它将不会保留这些值,因为它是一个新实例。拥有一个全局对象(静态)来保存您的所有值将是一个很好的起点。像那样公开文本框不是一个好主意。请参阅Tsukasa的答案,了解有关全球事物的一些想法。Hi Tsukasa,请您根据我上面的代码推荐示例。我应该如何处理全球事务。谢谢,谢谢Tsukasa,我正在尝试你的解决方案。将检查