using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.uc1 = new UserControl1();
this.uc1.Dock = DockStyle.Fill;
}
UserControl1 uc1;//右菜单项1
private void 载入第一次ToolStripMenuItem_Click(object sender, EventArgs e)
{
this.splitContainer1.Panel1.Controls.Clear();
this.splitContainer1.Panel1.Controls.Add(this.uc1);
//
}
//右菜单项2
private void 载入第二次ToolStripMenuItem_Click(object sender, EventArgs e)
{
this.splitContainer1.Panel2.Controls.Clear();
this.splitContainer1.Panel2.Controls.Add(this.uc1); }
}
}
//----
大家认为按这两个菜单项会有什么效果为什么?
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.uc1 = new UserControl1();
this.uc1.Dock = DockStyle.Fill;
}
UserControl1 uc1;//右菜单项1
private void 载入第一次ToolStripMenuItem_Click(object sender, EventArgs e)
{
this.splitContainer1.Panel1.Controls.Clear();
this.splitContainer1.Panel1.Controls.Add(this.uc1);
//
}
//右菜单项2
private void 载入第二次ToolStripMenuItem_Click(object sender, EventArgs e)
{
this.splitContainer1.Panel2.Controls.Clear();
this.splitContainer1.Panel2.Controls.Add(this.uc1); }
}
}
//----
大家认为按这两个菜单项会有什么效果为什么?
要包含的窗体.show();
a1=new A(3);
a2=a1;
a3=a1;a1,a2,a3,都指向同一个实例,在上面的winform例子中出现这种情况时即一个uc1被即加载到
sp.Panel1.Controls.Add(uc1);
sp.Panel2.Controls.Add(uc1);但它们都指向同一个uc1,这时如果点击相关菜单项欲在不同的Panel上显示uc1时
那么只能有一个uc1会被显示出来,而另一个Panel.Controls[0]虽然也引用了uc1的实例
但是缺无法同时显示出来,我想这是因为如果同时显示出来那么同一个实例就可能因为
接受不同的输入而变得同部状态或属性不一致,MS为了保护这种情况的发生于是就施加了
这种自动保护,即只能显示当前的那个Panel.Controls[0]中的uc1来..另一个Panel.Controls[0]中的实例并没有被移除而只是因为受保护而不能被显示出来,
不知我的这个推论,大家是否认同!