问题描述
即时窗口输出:this.pnlTool{System.Windows.Forms.Panel,BorderStyle:System.Windows.Forms.BorderStyle.None}base{System.Windows.Forms.ScrollableControl}:{System.Windows.Forms.Panel,BorderStyle:System.Windows.Forms.BorderStyle.None}AutoSize:trueAutoSizeMode:GrowAndShrinkBorderStyle:NoneTabStop:falseText:""curSubForm.pnlToolnullcurSubForm==thistrue实验了把curSubForm放到上一级对象也这样.
解决方案
解决方案二:
信息不全,宕机中
解决方案三:
谁知道你在干嘛呢,输出什么也是你控制的
解决方案四:
curSubForm.GetHashcode()this.GetHashcode()看看
解决方案五:
dontknowwhaturtalkingabout~~~~~~
解决方案六:
各位兄弟,意思就是说curSubForm==this但curSubForm.pnlTool!=this.pnlTool
解决方案七:
引用3楼的回复:
curSubForm.GetHashcode()this.GetHashcode()看看
colObj.curSubForm.GetHashCode()63517797this.GetHashCode()63517797colObj.curSubForm==thistruecolObj.curSubForm.pnlTool==this.pnlToolfalse
解决方案八:
好少用论坛,怎么才能回复到指定的某个兄弟呀?
解决方案九:
curSubForm.pnlTool为nullnull==null返回false
解决方案十:
MessageBox.Show((null==null).ToString());
解决方案十一:
代码如下else{colObj.curSubForm=this;}this.pnlToolContainner.Controls.Clear();this.pnlToolContainner.Controls.Add(colObj.curSubForm.pnlTool);colObj.curSubForm.curActived=true;
解决方案十二:
引用8楼的回复:
curSubForm.pnlTool为nullnull==null返回false
但是为什么curSubForm.pnlTool==null呢?this.pnlTool!=null的;刚刚才curSubForm=this;colObj.curSubForm.GetHashCode()63517797this.GetHashCode()63517797colObj.curSubForm==thistruecolObj.curSubForm.pnlTool==this.pnlToolfalsecolObj.curSubForm.pnlTool==nulltruethis.pnlTool==nullfalse
解决方案十三:
该回复于2012-04-12 10:28:10被版主删除
解决方案十四:
这样就行了,butWhy?我猜是C#中public字段的某些特性造成的;不过这样好像很担心啊,怎么引用啊?else{colObj.curSubForm=this;colObj.curSubForm.pnlTool=this.pnlTool;}this.pnlToolContainner.Controls.Clear();this.pnlToolContainner.Controls.Add(colObj.curSubForm.pnlTool);colObj.curSubForm.curActived=true;
解决方案十五:
该回复于2012-04-12 10:19:55被版主删除
解决方案:
引用12楼的回复:
curSubForm=this;之后curSubForm有没有被再次赋值?
没有的,有再次赋值也不能curSubForm==this了,代码如下,一定是执行elseelse{colObj.curSubForm=this;}this.pnlToolContainner.Controls.Clear();this.pnlToolContainner.Controls.Add(colObj.curSubForm.pnlTool);colObj.curSubForm.curActived=true;
解决方案:
我知道了。很明显,this是一个引用,你赋给curSubForm,并没有再复制一次。所以this.Controls.Clear()当然pnlTool没有了。curSubForm.pnlTool也没有了。
解决方案:
引用16楼的回复:
我知道了。很明显,this是一个引用,你赋给curSubForm,并没有再复制一次。所以this.Controls.Clear()当然pnlTool没有了。curSubForm.pnlTool也没有了。
这个有点道理,不过我没有执行过this.Controls.Clear(),只执行了this.pnlToolContainner.Controls.Clear()况且pnlTool的Owner是this,就算执行了this.Controls.Clear()也只应该把引用从ControlsListremove,this的成员pnlTool是不应该被改变的,只是不在界面上而已.
解决方案:
MSDN曰:可以使用Clear方法从父控件中移除整个控件集合。若要从集合中移除单个控件,请使用Remove或RemoveAt方法。重要事项:调用Clear方法不会从内存中移除控件句柄。必须显式调用Dispose方法才能避免内存泄漏。
解决方案:
儿子引用了老子的东西,不引用了就老子也用不了...太恐怖,也不应该,这样会乱套的!
解决方案:
贴点代码出来
解决方案:
代码贴了好多次了,总结下代码如下:colObj.curSubForm=this;this.pnlToolContainner.Controls.Clear();BreakPoint:this.pnlToolContainner.Controls.Add(colObj.curSubForm.pnlTool);colObj.curSubForm.curActived=true;在BreakPoint停下后即时窗口手动调试结果如下:colObj.curSubForm.GetHashCode()63517797this.GetHashCode()63517797colObj.curSubForm==thistruecolObj.curSubForm.pnlTool==this.pnlToolfalsecolObj.curSubForm.pnlTool==nulltruethis.pnlTool==nullfalse
解决方案:
难道....彻底的沉了?
解决方案:
说真的,我非常有兴趣调试一下你这段代码,但是非常遗憾,在正常环境中是不可能出现这种情况的,所以需要实际调试才有结果。
解决方案:
该回复于2012-04-13 11:06:33被版主删除
解决方案:
引用23楼的回复:
说真的,我非常有兴趣调试一下你这段代码,但是非常遗憾,在正常环境中是不可能出现这种情况的,所以需要实际调试才有结果。
不懂你的意思,我是运行的时候出现这样的情况哦...
解决方案:
引用25楼的回复:
引用23楼的回复:说真的,我非常有兴趣调试一下你这段代码,但是非常遗憾,在正常环境中是不可能出现这种情况的,所以需要实际调试才有结果。不懂你的意思,我是运行的时候出现这样的情况哦...
很明显这种情况是不应该发生的,所以我真想能亲眼看看这个情况。