当前位置:编程学习 > C#/ASP.NET >>

请教大侠,这是为啥,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 --------------------编程问答--------------------
引用 3 楼  的回复:
curSubForm.GetHashcode()
this.GetHashcode()
看看



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; --------------------编程问答--------------------
引用 8 楼  的回复:
curSubForm.pnlTool 为 null

null == null 返回 false


但是为什么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;
--------------------编程问答-------------------- --------------------编程问答--------------------
引用 12 楼  的回复:
curSubForm = this;
之后
curSubForm有没有被再次赋值?


没有的,有再次赋值也不能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也没有了。 --------------------编程问答--------------------
引用 16 楼  的回复:
我知道了。很明显,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 --------------------编程问答-------------------- 难道....彻底的沉了? --------------------编程问答-------------------- 说真的,我非常有兴趣调试一下你这段代码,但是非常遗憾,在正常环境中是不可能出现这种情况的,所以需要实际调试才有结果。 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 23 楼  的回复:
说真的,我非常有兴趣调试一下你这段代码,但是非常遗憾,在正常环境中是不可能出现这种情况的,所以需要实际调试才有结果。


不懂你的意思,我是运行的时候出现这样的情况哦... --------------------编程问答--------------------
引用 25 楼  的回复:
引用 23 楼 的回复:

说真的,我非常有兴趣调试一下你这段代码,但是非常遗憾,在正常环境中是不可能出现这种情况的,所以需要实际调试才有结果。


不懂你的意思,我是运行的时候出现这样的情况哦...

很明显这种情况是不应该发生的,所以我真想能亲眼看看这个情况。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,