Windows应用程序(C#.Net) - 保留TextBox值

时间:2014-01-30 21:16:03

标签: c# winforms

以下是我的场景:( Windows Application / C#.Net)

我有一个Form1正在进行一些计算,选择选项为Case 1和On Button Click it将所有文本框值推送到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;
        }

2 个答案:

答案 0 :(得分: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();

}

答案 1 :(得分:1)

好的,我明白你现在在问什么。您可以将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");
}

Form2我们将改为Singleton模式

   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; }
}
Form1中的

if(comboBox1.Text == "Case 1")
{
        Global.Value1 = textBox1.Text;
        Global.Value2 = textBox8.Text;
}   

在Form2加载事件

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

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

你应该使用这样的东西

if(comboBox1.Text.Equals("Case 1"))
{
}
else if (comboBox1.Text.Equals("Case 2"))
{
}

OR

switch (comboBox1.Text)
{
    case "Case 1":
        //do stuff
    break;
    case "Case 2":
        //do stuff
    break;
}