两个form之间调用问题?

Frewin 2008-10-23 03:35:35
不讨论程序背景,现在有这样的需求:
在Form1中定义了
List <Form2> d = new List <Form2>();
并定义了
1)add
2)remove两个方法。
在Form1中引用Form2时:
Form2 frm = new Form2();
frm.show();
d.add(frm);
现在,需要在Form2关闭后,执行d.remove()操作,目的是将这个实例清除。
...全文
150 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wryse 2008-10-23
  • 打赏
  • 举报
回复
呃,懒得多想了,只问一句:那个form2能不能不用Show而用ShowDialog调用?如果能的话一切都解决了……
Form2 frm = new Form2();
d.add(frm);
frm.ShowDialog();
d.remove(frm);
tg8388 2008-10-23
  • 打赏
  • 举报
回复
override Form2的OnFormClosed方法就可以了啊。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private List<Form2> _list = new List<Form2>();

private void Button1_Click(object sender, EventArgs e)
{
Form2 form = new Form2(_list);
_list.Add(form);
form.Show();
}
}

public partial class Form2 : Form
{
private Form2()
{
InitializeComponent();
}


private readonly List<Form2> _list;
public Form2(List<Form2> list):this()
{
_list = list;
}
protected override void OnFormClosed(FormClosedEventArgs e)
{
base.OnFormClosed(e);
_list.Remove(this);
}

}
wartim 2008-10-23
  • 打赏
  • 举报
回复
lz开2贴,我就贴2遍

namespace WindowsApplication25
{
public partial class Form1 : Form
{
public static List<string> d = new List<string>();

public Form1()
{
InitializeComponent();

new Form2().ShowDialog(this);
MessageBox.Show(d[0]);
}
}
}


form2:
namespace WindowsApplication25
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
List<string> d = null;
d=(List<string>)this.Owner.GetType().GetField("d").GetValue(d);
d.Add("aaa");
Close(); // 关闭form2
}
}
}
ZM27080401 2008-10-23
  • 打赏
  • 举报
回复
LZ,这种在两个form间调用,是有技巧的,其实LZ没有搞清,句柄的概念,所以在调用的时候根本不知道是在调那个窗体,.net中一样存在句柄的概念,举例:
class A_form:form
{
B_form b=new B_form();
b.obj=this;//重点;
b.show();
}
class B_form:form
{
public object obj;
A_form a=(A_form)obj;
}
这样A就可以被B调用了,并且也是当前的A_form对象,如果不清楚可以发信息给我
enihs 2008-10-23
  • 打赏
  • 举报
回复

public partial class Form1 : Form
{
private List<Form2> d = new List<Form2>();
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{

}

private void button1_Click(object sender, EventArgs e)
{

Form2 frm = new Form2(this);
d.Add(frm);
frm.Show();
}

public void DoReMove(Form2 frm)
{
this.d.Remove(frm);
}
}

public delegate void FormHandle(Form2 frm);
public partial class Form2 : Form
{
private Form1 m_Form1;

public event FormHandle DoSomething;

private void OnFormHandle(Form2 frm)
{
DoSomething(frm);
}

public Form2(Form1 frm)
{
m_Form1 = frm;
InitializeComponent();
DoSomething += new FormHandle(this.m_Form1.DoReMove);
}

private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
this.OnFormHandle(this);
}
}

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我这样写是好的。
小强哥 2008-10-23
  • 打赏
  • 举报
回复
用Static定义试试呢
Frewin 2008-10-23
  • 打赏
  • 举报
回复
不好意思,二楼的方法是不行的,你错了我的意思
enihs 2008-10-23
  • 打赏
  • 举报
回复
楼上我觉得你误会了楼主的意思,d如果为Form1中私有方法在form2中是调用不到的...,所以你显示的写d.Remove()不太合适哦
wheeler 2008-10-23
  • 打赏
  • 举报
回复
Form2 frm = new Form2();
d.add(frm);
frm.show();
d.remove(frm);
frm.Dispose();

form2的关闭事件为:
this.close();
enihs 2008-10-23
  • 打赏
  • 举报
回复
楼主分真多,一个问题开两帖 还有200分。d.remove()这个函数和一个事件绑定,然后在form2的关闭事件中触发它就ok了

110,534

社区成员

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

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

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