TreeView.Node.Tag的属性为什么变了

gdlhwbs 2006-06-22 05:24:57
在数据库中,有 表A(字段:name ,ClaAid)并事先添加两记录,name ,ClaAid
name1 1
name2 2
在建一表 表B(字段:ClaAid(引用表A的ClaAid),sumry),有两记录----------ClaAid sumry
1 sumry1
2 sumry2
在程序里建一对象private class ClaA
{
string name = "";
int ClaAid = -1;
}
再建一TreeNode,加一根结点,TreeNode.Tag=ClaA一事例对象。将数据库记录(表A)读出,与是树上有两个子接点:name1,name2.当选中name1时,可以通过name1.Tag.ClaA.ClaAid读取表B中的关联记录,name2也一样。现在将表B里与 name1 关联的记录读出,并将该记录的ClaAid改为2,保存,发现此时
name1.Tag.ClaA.ClaAid = 2,原来时等于1的。然而我并没有改该Tag对象里的任何东西。关闭程序,重新运行程序,name1.Tag.ClaA.ClaAid又还原为原来正确的1.
这时怎么回事情呢?
我说明白了吗?
我的目的 不能修改树接点的tag.claA.ClaAid的值,我也不知道时什么原因修改了tag.claA.ClaAid的值

...全文
276 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
gdlhwbs 2006-06-22
  • 打赏
  • 举报
回复
不解,我是再两个窗体操作里,难道第二个窗体里的对象还可以使用第一个窗体里的某个对象的一个int型的引用。而且 C#里,int不是引用地址吧
但是 我使用 New以后就好了
不解 不解 不解
感谢
gdlhwbs 2006-06-22
  • 打赏
  • 举报
回复
确实是引用的问题,我没用 new
非常感谢
可以回家了
gdlhwbs 2006-06-22
  • 打赏
  • 举报
回复
中间又很多片段没写出来
先要 从数据库里读表A

每读一条,创建一个ClaA对象,并将数据存入ClaA对象,然后将该对象加到树结构上(微软的标准TreeView)

选中一个结点时,提取该结点Tag对象,读取tag.ClaAid值,通过tag.ClaAid读取表B里的相关记录

读取以后 修改表B记录的ClaAid的值,保存。
此时发现 被选中结点的tag.ClaAid也跟着变了

而我并没有改他,树型图只在程序第一次加载时构造,以后再每动她, 但她却变了
Knight94 2006-06-22
  • 打赏
  • 举报
回复
由于class定义的类型对象,在赋值操作时候,是传递对象引用。因此某处进行修改,最造成副本也进行修改了。
diandian82 2006-06-22
  • 打赏
  • 举报
回复
晕了,没看懂
gdlhwbs 2006-06-22
  • 打赏
  • 举报
回复
但我也又其他非常类似的做法,只不过表B里的字段不只3个,那些都没问题。
这一次 表B里只有三个字段,就出问题了,恼火的是不知道问题出在哪里
Knight94 2006-06-22
  • 打赏
  • 举报
回复
参看clone方法。
http://blog.csdn.net/Knight94/archive/2006/06/04/772886.aspx
Knight94 2006-06-22
  • 打赏
  • 举报
回复
存的时候,不要存对象,而要存对象的clone。

不过你的类型要提供clone函数。
gdlhwbs 2006-06-22
  • 打赏
  • 举报
回复
来呀 闪分了

110,568

社区成员

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

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

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