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

我是纯粹的初学者,被数据库老师逼着用c#写程序,实际上我们都没学过c#.因为不会别的方法,我就用了建造多个panel来实现页面切换.我看网上说这样还可以避免多个form间... 我是纯粹的初学者,被数据库老师逼着用c#写程序,实际上我们都没学过c# .
因为不会别的方法,我就用了建造多个panel来实现页面切换.我看网上说这样还可以避免多个form间共享数据的麻烦.
我现在的程序,登陆页面用loginpanel载着所有的textbox等等,等到login成功,我就把loginpanel整个扔到页面外面去,把userpanel拽过来.
但是随着panel越来越多,有时候会出现切页面失败,整个窗口变成底色的问题.我查了网上之后,发现是我编辑程序的时候把一个当前没有编辑的panel放到旁边,正好盖在了另一个panel上. 系统就把这两个panel判定为父子控件,一并被拖走了.用visible的话,也是同样的问题.父子控件一并消失.
希望高手赐教,怎么能防止这一问题的发生.随着panel越来越多,我已经没那么大地方把它们一字排开了. 有没有属性能防止他们变成互相的子控件?
谢谢了
如果说panel这个不好实现,有没有其他多窗口切换的方法? 新建一个form? 怎么让两个form互相切换? 数据传递如何?
展开
 我来答
yang890511
2009-11-26 · TA获得超过649个赞
知道小有建树答主
回答量:570
采纳率:0%
帮助的人:497万
展开全部
自己修改一下设计器生成的代码.
下面这句是把panel2添加到panel1上,
this.panel1.Controls.Add(this.panel2);
如果改成:
this.Controls.Add(this.panel2);
就是把panel2直接添加到form上.
所在的文件名:Form1.Designer.cs

还有不会你可以把你的项目发给我,我帮你改.
GPY11
2009-11-26 · TA获得超过681个赞
知道小有建树答主
回答量:309
采纳率:0%
帮助的人:255万
展开全部
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;
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dopsop
2009-11-26 · TA获得超过252个赞
知道小有建树答主
回答量:434
采纳率:0%
帮助的人:236万
展开全部
这样太麻烦了
早点抛弃
像你这样把这么多Panel放一个页面上 以后维护 或者修改啥的 都太费劲了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
落月Prc
2009-11-26 · TA获得超过2789个赞
知道大有可为答主
回答量:2011
采纳率:100%
帮助的人:2443万
展开全部
没有额。你添加的时候可以切换到HTML源代码,然后插入控件。或者自己手动写Panel控件也一样。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式