我有两种形式 - Form1和Form2。
Form1中:
public partial class Form1 : Form
{
public void Drawnewmap(bool suzey) {
bool dsuzey=suzey;
if (dsuzey==true) textBox1.Text = "1" ;
}
public Form1()
{
InitializeComponent();
}
}
窗体2:
private void button1_Click(object sender, EventArgs e)
{
Form1 f1 = new Form1();
bool m = false;
if (checkBox1.Checked == true) m = true;
f1.Drawnewmap(m);
this.Close();
}
但是当我点击时,没有任何反应。 TextBox为空。为什么? 对不起英语不好,谢谢你的回答。
答案 0 :(得分:2)
你永远不会真正展示表格,也许你应该有更多的东西:
我有两种形式 - Form1和Form2。
private void button1_Click(object sender, EventArgs e)
{
Form1 f1 = new Form1();
bool m = false;
if (checkBox1.Checked == true) m = true;
f1.Drawnewmap(m);
f1.Show(); // You're missing this call
this.Close();
}
答案 1 :(得分:2)
如果您想通过第二张表格到达第一张有效表格,您应该在第二张表格中定义第一张表格,如:
Form1 frm = (Form1)Application.OpenForms["Form1"];
而不是
Form1 f1 = new Form1();
如果您使用“Form1 f1 = new Form1();”,您将创建一个新表单,您将无法访问活动表单。
答案 2 :(得分:1)
您没有显示您创建的form1
。
private void button1_Click(object sender, EventArgs e)
{
Form1 f1 = new Form1();
bool m = false;
if (checkBox1.Checked == true) m = true;
f1.Drawnewmap(m);
f1.Show();//or ShowDialog()...
this.Close();
}
请注意,如果Form2
是主要表单“你可以在Main处检查”,如果你关闭它,它将退出整个应用程序,所以如果是这种情况要么使form1成为主要表单,或调用此this.Hide();
而不是this.Close();
答案 3 :(得分:1)
因为您创建了新的Form1实例。我认为在子窗口中从父窗口调用某些东西是个坏主意。但你可以这样做: 创建Form2时,传递对当前Form1对象的引用
Form2 form = new Form2(this);
在Form2构造函数中保存私有变量中的Form1引用。
private Form1 myform1;
然后你的代码需要看起来像这样:
private void button1_Click(object sender, EventArgs e)
{
bool m = false;
if (checkBox1.Checked == true) m = true;
myform1.Drawnewmap(m);
this.Close();
}
答案 4 :(得分:1)
我更喜欢使用包含状态
的表单中的属性来解决此问题== 表格1 ==
public partial class Form1 : Form
{
bool is_dsuzey;
public Form1()
{
InitializeComponent();
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (is_dsuzey) textBox1.Text = "1";
}
public bool IsDsuzey { get { return is_dsuzey; } set { is_dsuzey = value; } }
}
== 表格2 ==
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form1 f1 = new Form1();
f1.IsDsuzey = checkBox1.Checked;
f1.Show();
}
}
如果它是应用程序的主要形式,我会提醒this.Close();
语句在Form2
中,因为它会关闭整个应用程序。如果Application.Run()
调用其他形式,则没有问题。