调用另一个窗体的方法

gengxin_914 2009-04-14 02:43:20
有A、B两个窗体
A窗体有个方法,用来返回listview控件的值:
 
public List<string> GetAppNameList()
{
List<string> arrAppName = new List<string>();
foreach (ListViewItem lvi in lvApp.Items)
{
arrAppName.Add(lvi.Tag.ToString());
}
return arrAppName;
}

B窗体要调用:

B cf = new B();
List<string> cf = cf.GetAppNameList();

A窗体的Listview是有值的,但是调用时却始终是空的,怎么解决。
...全文
205 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
xms5201314 2009-04-15
  • 打赏
  • 举报
回复
学习!
leiounasi 2009-04-15
  • 打赏
  • 举报
回复
7楼说的是对的~你new一个B窗体,就是实例化了一个B窗体,也就是B窗体是一个新的空白的什么都没有的~当然你的list里面会没有值的~着很正常。像7楼说的那样你在实例化B的时候要把当前窗体当做一个参数传进去这样才能正常用到里面的值。给你个例子

//A窗体有个方法GetAppNameList,当A窗体切换到B窗体时这样写
B b = new B(this);
B.ShowDialog();
//在B窗体首先要接收这个窗体参数
public Form1 f;
public B(A form)
{
InitializeComponent();
this.f = form;
}

private void Button_Click(object sender, EventArgs e)
{
f.GetAppNameList();
}

这样用就可以了~
Jacky_wei 2009-04-15
  • 打赏
  • 举报
回复
好好学习.
  • 打赏
  • 举报
回复
调用窗体有朗复杂啊?我狂晕
lovex11l 2009-04-15
  • 打赏
  • 举报
回复
学习学习
POWER_WONG 2009-04-15
  • 打赏
  • 举报
回复
关注一下!
Hassle 2009-04-15
  • 打赏
  • 举报
回复
public void GetAppNameList(List<string> arrAppName)
{
foreach (ListViewItem lvi in lvApp.Items)
{
arrAppName.Add(lvi.Tag.ToString());
}
}
冷月孤峰 2009-04-15
  • 打赏
  • 举报
回复
在A窗口定义个静态变量aa
aa =GetAppNameList();

然后B窗体调用:
A.aa
zgke 2009-04-15
  • 打赏
  • 举报
回复
你的A窗体的ListView是那里加再的数据.

A A = new A(); 这样不会执行Load事件
itliyi 2009-04-15
  • 打赏
  • 举报
回复
new 出B窗体的时候 把A地址通过构造函数传递过去
B b=new B(this);b.Show();
mykelly6 2009-04-14
  • 打赏
  • 举报
回复
写成静态方法,用listview做参数,这样就与类的实例无关了。
如果是要要用另一个窗体的listview的话,就涉及到窗体之间的传值问题了。
gengxin_914 2009-04-14
  • 打赏
  • 举报
回复
TO4楼:不好意思,是我发帖的时候写错了。
luckycomet 2009-04-14
  • 打赏
  • 举报
回复
第一段代码是写在A类里的么?
那为什么调用的是实例化的是B类呢?
应该不是同一个实例的原因。
楼主再看看。
fenglm999 2009-04-14
  • 打赏
  • 举报
回复
B cf = new B();
List<string> cf = cf.GetAppNameList();
我想可能存在两个原因,一是你的cf是new的一个是不是和你有值的窗体同一个对象,而是lvi.Tag的值是不是空的,你仔细检查一下代码相信可以找到
gengxin_914 2009-04-14
  • 打赏
  • 举报
回复
在A窗体调用
public List<string> GetAppNameList()
{
List<string> arrAppName = new List<string>();
foreach (ListViewItem lvi in lvApp.Items)
{
arrAppName.Add(lvi.Tag.ToString());
}
return arrAppName;
}

是有值的,但是用B窗体调用时就为空了
laorer 2009-04-14
  • 打赏
  • 举报
回复
public List<string> GetAppNameList()
{
Console.writeLine("lvApp.Items.Count: {0}",lvApp.Items.Count);
List<string> arrAppName = new List<string>();
foreach (ListViewItem lvi in lvApp.Items)
{
arrAppName.Add(lvi.Tag.ToString());
}
return arrAppName;
}



你在这段代码中输出一下就知道有没有值了

110,571

社区成员

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

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

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