C#panel问题 如何让panel永远不成为另一个panel的子控件?

我是纯粹的初学者,被数据库老师逼着用c#写程序,实际上我们都没学过c# .
因为不会别的方法,我就用了建造多个panel来实现页面切换.我看网上说这样还可以避免多个form间共享数据的麻烦.
我现在的程序,登陆页面用loginpanel载着所有的textbox等等,等到login成功,我就把loginpanel整个扔到页面外面去,把userpanel拽过来.
但是随着panel越来越多,有时候会出现切页面失败,整个窗口变成底色的问题.我查了网上之后,发现是我编辑程序的时候把一个当前没有编辑的panel放到旁边,正好盖在了另一个panel上. 系统就把这两个panel判定为父子控件,一并被拖走了.用visible的话,也是同样的问题.父子控件一并消失.
希望高手赐教,怎么能防止这一问题的发生.随着panel越来越多,我已经没那么大地方把它们一字排开了. 有没有属性能防止他们变成互相的子控件?
谢谢了
如果说panel这个不好实现,有没有其他多窗口切换的方法? 新建一个form? 怎么让两个form互相切换? 数据传递如何?

自己修改一下设计器生成的代码.
下面这句是把panel2添加到panel1上,
this.panel1.Controls.Add(this.panel2);
如果改成:
this.Controls.Add(this.panel2);
就是把panel2直接添加到form上.
所在的文件名:Form1.Designer.cs

还有不会你可以把你的项目发给我,我帮你改.
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-11-26
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;

namespace WindowsApplication21
{
/// <summary>
/// Form2 的摘要说明。
/// </summary>
public class Form2 : System.Windows.Forms.Form
{
private bool flag = false;
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.Panel panel2;
private System.Windows.Forms.Button button1;
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null;

public Form2()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();

//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}

/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows 窗体设计器生成的代码
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.panel1 = new System.Windows.Forms.Panel();
this.panel2 = new System.Windows.Forms.Panel();
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// panel1
//
this.panel1.BackColor = System.Drawing.Color.IndianRed;
this.panel1.Location = new System.Drawing.Point(32, 32);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(152, 48);
this.panel1.TabIndex = 0;
//
// panel2
//
this.panel2.BackColor = System.Drawing.Color.SpringGreen;
this.panel2.Location = new System.Drawing.Point(98, 64);
this.panel2.Name = "panel2";
this.panel2.Size = new System.Drawing.Size(96, 80);
this.panel2.TabIndex = 1;
//
// button1
//
this.button1.Location = new System.Drawing.Point(96, 200);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(128, 56);
this.button1.TabIndex = 2;
this.button1.Text = "button1";
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// Form2
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(292, 273);
this.Controls.Add(this.panel2);
this.Controls.Add(this.button1);
this.Controls.Add(this.panel1);
this.Name = "Form2";
this.Text = "Form2";
this.ResumeLayout(false);

}
#endregion

private void button1_Click(object sender, System.EventArgs e)
{
if (flag)
this.panel1.SendToBack();
else
this.panel2.SendToBack();
flag = !flag;
}
}
}
第2个回答  2009-11-26
这样太麻烦了
早点抛弃
像你这样把这么多Panel放一个页面上 以后维护 或者修改啥的 都太费劲了本回答被提问者采纳
第3个回答  2009-11-26
没有额。你添加的时候可以切换到HTML源代码,然后插入控件。或者自己手动写Panel控件也一样。

C#将一个panel控件添加到另一个panel控件中,但是高度会超出父控件的范围...
1、子控件超出父控件的范围可以设置父控件的AutoScroll属性为true来使用滚动条;2、要将添加的Panel显示在父控件中所有控件之上可以通过调整添加子控件的顺序来处理,也可以直接使用如下代码:\/\/将child这个控件显示在最上面:child.BringToFront();希望对你有帮助,还有疑问请追问或是Hi ...

c#panel内窗体控制panel切换另一个窗体
在 C# 中,可以使用 Panel 控件来实现在一个窗体中切换另一个窗体的效果。首先需要创建一个 Panel 控件,用来容纳其他的窗体。接下来,在点击按钮或执行其他操作时,使用 Panel.Controls.Clear() 方法清空 Panel 中的控件,然后使用 Panel.Controls.Add() 方法将新的窗体加入。public partial class Form...

C#中怎么使panel移动但不移出form1?
在 MouseMove 事件中去触发 Paint,根据鼠标当前坐标绘制一个圆圈并填充颜色即可。

...的panel控件中添加一个label控件,怎么能让panel的text文本一直在panel...
也就是计算label相对于panel的中心位置,赋给Location属性即可。

c# panel停靠的问题
我刚做的例子,不知道是不是你要的结果(图在下面)我不是用的anchor属性,而是dock属性,rightPannel的dock就是right,topPannel的dock就是top,不过他们的放置顺序是righgPannel在下,topPannel在上 看下是不是这样的效果 。。。

c#怎么自定义控件继承Panel
就像一般的对象定义属性和事件就可以了,比如 public string Title { get { return myLabel.Text; } set { myLabel.Text = value; } } public EventHandler PanelClick { add { myPanel.Click += value; } remove { myPanel.Click -= value; } } 能否在Visual Studio支持拖入控件是由控件的...

C# 在panel中切换子窗体,如何让切换后的子窗体各控件状态保持不变?
你说的切换是指具体怎么个切换法,截个图上来看看。如果只是单纯的切换,控件的状态是不会变化的。

C#我循环删除panel上面的控件 为什么总是会留下一个删不掉啊
可能这个控件不在这个panel里,你在designer文件里看看 【你的panel.Controls.Add(没有删除的控件)】 能找到这句话吗?如果没有的话,把这个控件从panel里拖出来,在重新拖进去一般就行了

c#中,多个panel重叠使用的问题,请大侠帮忙
VS中有一个文档大纲视图,你可以将你的panel控件拖动到窗体下面然后在调整一下坐标就好了,这个问题我刚开始的时候也遇到过,很简单的。希望对你有帮助。请采纳!

c#中panel控件的问题
是不是p1是p2的包含控件,p2又是p3的包含控件?控件会隐藏它包含的所有控件。微软窗体设计时panel会自动把拖到它上面的控件作为它包含的控件。你可以在代码中把p1.Controls.Add(p2)改成 this.Controls.Add(p2),p2.Controls.Add(p3)改成this.Controls.Add(p3);这样就不会出现那种情况了。

相似回答