请教大侠,这是为啥,C#入门
即时窗口输出: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: true
AutoSizeMode: GrowAndShrink
BorderStyle: None
TabStop: false
Text: ""
curSubForm.pnlTool
null
curSubForm == this
true
实验了把curSubForm放到上一级对象也这样. --------------------编程问答-------------------- 信息不全,宕机中 --------------------编程问答-------------------- 谁知道你在干嘛呢,输出什么也是你控制的 --------------------编程问答-------------------- curSubForm.GetHashcode()
this.GetHashcode()
看看
--------------------编程问答-------------------- dont know what u r talking about~~~~~~ --------------------编程问答-------------------- 各位兄弟,意思就是说 curSubForm==this 但 curSubForm.pnlTool != this.pnlTool --------------------编程问答--------------------
colObj.curSubForm.GetHashCode()
63517797
this.GetHashCode()
63517797
colObj.curSubForm == this
true
colObj.curSubForm.pnlTool == this.pnlTool
false
--------------------编程问答-------------------- 好少用论坛,怎么才能回复到指定的某个兄弟呀? --------------------编程问答-------------------- curSubForm.pnlTool 为 null
null == 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; --------------------编程问答--------------------
但是为什么curSubForm.pnlTool==null呢? this.pnlTool != null的;刚刚才 curSubForm=this;
colObj.curSubForm.GetHashCode()
63517797
this.GetHashCode()
63517797
colObj.curSubForm == this
true
colObj.curSubForm.pnlTool == this.pnlTool
false
colObj.curSubForm.pnlTool ==null
true
this.pnlTool == null
false
--------------------编程问答-------------------- --------------------编程问答-------------------- 这样就行了,but Why? 我猜是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;
--------------------编程问答-------------------- --------------------编程问答--------------------
没有的,有再次赋值也不能curSubForm==this了,代码如下 ,一定是执行else
else
{
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也没有了。 --------------------编程问答--------------------
这个有点道理, 不过我没有执行过this.Controls.Clear(),只执行了 this.pnlToolContainner.Controls.Clear()
况且pnlTool的Owner是this,就算执行了this.Controls.Clear()也只应该把引用从 Controls List remove,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()
63517797
this.GetHashCode()
63517797
colObj.curSubForm == this
true
colObj.curSubForm.pnlTool == this.pnlTool
false
colObj.curSubForm.pnlTool ==null
true
this.pnlTool == null
false --------------------编程问答-------------------- 难道....彻底的沉了? --------------------编程问答-------------------- 说真的,我非常有兴趣调试一下你这段代码,但是非常遗憾,在正常环境中是不可能出现这种情况的,所以需要实际调试才有结果。 --------------------编程问答-------------------- --------------------编程问答--------------------
不懂你的意思,我是运行的时候出现这样的情况哦... --------------------编程问答--------------------
很明显这种情况是不应该发生的,所以我真想能亲眼看看这个情况。
补充:.NET技术 , C#