问一个很简单的问题关于winform刷新的。在线等,结贴。

keyake863 2010-04-13 11:09:06
有两个窗体 form1 和form2 点击form1 上的一个按钮弹出form2,这是form1上的按钮代码。
private void button2_Click(object sender, EventArgs e)
{
Form2 f=new Form2();
f.ShowDialog();
}
form2上也有一个按钮点击的时候会给form1回传一个值。form1把这个值显示在控件上,这是form2的按钮点击事件,我通过调用form1 的一个public方法传值给form1
private void button1_Click(object sender, EventArgs e)
{
Form1 f = new Form1();
f.Form2Close("要传值的数据");
this.Close();

}
然后form1 的Form2Close方法这样写的
public void Form2Close(string returnValue)
{
listBox1.Items.Add(returnValue);
MessageBox.Show(returnValue);
}
我想让form1 的listBox1添加进来这个值。但是关闭form2执行这个方法以后listBox1并没有添加进去相应的值,但是MessageBox.Show(returnValue);却可以显示出传过来的值,我估计是因为form1的listBox1没有刷新的原因,小弟刚接触winform,还请大家指教解决方法。

...全文
189 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
KnowKjava 2010-04-13
  • 打赏
  • 举报
回复
对,断点调试下
andybang1981 2010-04-13
  • 打赏
  • 举报
回复
listBox1.Items.Add(returnValue);
这里有错啊,LISTBOX是FORM1的吧,你在FORM2上能用,就算你改了它的作用域为PUBLIC,这样就破坏了封装性,你得用构造函数传参数
Form2 f2;
public Form1(Form2 f2)
{
InitializeComponent();
this.f2 = f2;
if(f2._str != null)
listBox1.Items.Add(f2._str.ToString());
}

private string str;

public string _str
{
get
{
return str;
}
set
{
str = value;
}
}


private void button1_Click(object sender, EventArgs e)
{
str = "andybang";
Form1 f1 = new Form1(this);
f1.Show();
}
lanfengsese 2010-04-13
  • 打赏
  • 举报
回复
断点调试下
myhope88 2010-04-13
  • 打赏
  • 举报
回复
弹出form2窗体时,直接将form1对象传到form2中,这样在form2就可以访问form1对象了,也就可以操作form1中的东西了
keyake863 2010-04-13
  • 打赏
  • 举报
回复
楼上的意思是由于我实例化了一个新的form1
Form1 f = new Form1();
这样再调用的时候调用的是 新form1的方法,而不是原来的form1的,所以不能改变原form1的值?
andy1118 2010-04-13
  • 打赏
  • 举报
回复
在FORM1窗体申明一个静态成员
public partial class Form1 : Form
{
public static string s1;

按钮事件打开FORM2窗体用ShowDialog后用命令语句赋值
private void button2_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
frm2.ShowDialog();
textBox1.Text = s1;
}


FORM2按钮事件给FORM1窗体的静态成员赋值,然后关闭

public Form2()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
Form1.s1 = "aabbcc";
this.Close();
}


DreamTiger 2010-04-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 keyake863 的回复:]

楼上的意思是由于我实例化了一个新的form1
Form1 f = new Form1();
这样再调用的时候调用的是 新form1的方法,而不是原来的form1的,所以不能改变原form1的值?
[/Quote]

显然是这个问题啊。在Form2里面设置一个:
property Form1 ParentForm{get;set;}

然后在form1的事件中:
private void button2_Click(object sender, EventArgs e)
{
Form2 f=new Form2();
f.ParentForm = this;
f.ShowDialog();
}

在form2的事件中:
private void button1_Click(object sender, EventArgs e)
{
ParentForm.Form2Close("要传值的数据");
this.Close();
}
皇城龙三 2010-04-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 keyake863 的回复:]
楼上的意思是由于我实例化了一个新的form1
Form1 f = new Form1();
这样再调用的时候调用的是 新form1的方法,而不是原来的form1的,所以不能改变原form1的值?
[/Quote]

我觉得1楼说的有一定道理,你的传值可能有点问题,跟踪一下listBox1.Items.Add(returnValue)看看Items里面有没有数据。

如果有的话,建议加条语句

this.Refresh();
或者
listBox1.Refresh();

试一试

siegebaoniu 2010-04-13
  • 打赏
  • 举报
回复
你点form2上的按钮,
传给form1的值,
然后把form2关掉,this.close();
//不需要new form1()了。

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧