以下是我的场景:( 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;
}
答案 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;
}