解决问题--VS2012中一个Panel覆盖另一个Panel时拖动时容易造成两个控件成父子关系的避免...

本文介绍了解决Visual Studio中面板层级覆盖问题的方法。当需要将一个面板(panel1)置于另一个面板(panel2)之上而非作为其子控件时,可以通过修改 *.Designer.cs 文件中的代码来实现。具体操作为注释掉 this.panel2.Controls.Add(this.panel1) 这一行,并添加 this.Controls.Add(this.panel1)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在*.Designer.cs中,假如想把panel1覆盖到panel2上,但是VS自动让panel1成为panel2的子控件了,在文件中会有this.panel2.Controls.Add(this.panel1).

解决方法:注释此行,并且添加this.Controls.Add(this.panel1);

转载于:https://www.cnblogs.com/ddx-deng/p/3755847.html

using System; using System.Windows.Forms; namespace KnowledgeTreeEditor { public partial class MainForm : Form { private ComboBox comboBoxSubjects; private TextBox textBoxName, textBoxContent; private Button buttonSave; private TreeNode selectedNode; public MainForm() { InitializeComponent(); InitializeCustomControls(); InitializeKnowledgeTree(); } private void InitializeCustomControls() { // 设置 TreeView treeView1.Dock = DockStyle.Left; treeView1.Width = 250; treeView1.AfterSelect += TreeView1_AfterSelect; // 布局 Panel Panel panel = new Panel(); panel.Dock = DockStyle.Fill; this.Controls.Add(panel); // 知识点名称 Label labelName = new Label() { Text = "知识点名称:" }; textBoxName = new TextBox() { Dock = DockStyle.Top, Width = 200 }; // 知识点内容 Label labelContent = new Label() { Text = "知识点内容:" }; textBoxContent = new TextBox() { Dock = DockStyle.Top, Multiline = true, Height = 100 }; // 所属学科 Label labelSubject = new Label() { Text = "所属学科:" }; comboBoxSubjects = new ComboBox() { Dock = DockStyle.Top }; comboBoxSubjects.Items.AddRange(new string[] { "计算机科学", "数学", "物理", "化学" }); // 保存按钮 buttonSave = new Button() { Text = "保存", Dock = DockStyle.Top }; buttonSave.Click += ButtonSave_Click; // 添加控件Panel panel.Controls.Add(buttonSave); panel.Controls.Add(comboBoxSubjects); panel.Controls.Add(labelSubject); panel.Controls.Add(textBoxContent); panel.Controls.Add(labelContent); panel.Controls.Add(textBoxName); panel.Controls.Add(labelName); } private void InitializeKnowledgeTree() { TreeNode root = new TreeNode("知识体系"); TreeNode csNode = new TreeNode("编程语言"); csNode.Nodes.Add(new TreeNode("C#")); csNode.Nodes.Add(new TreeNode("Python")); TreeNode mathNode = new TreeNode("数据结构"); mathNode.Nodes.Add(new TreeNode("数组")); mathNode.Nodes.Add(new TreeNode("链表")); root.Nodes.Add(csNode); root.Nodes.Add(mathNode); treeView1.Nodes.Add(root); } private void TreeView1_AfterSelect(object sender, TreeViewEventArgs e) { selectedNode = e.Node; // 自动填充表单字段 textBoxName.Text = e.Node.Text; textBoxContent.Text = e.Node.Tag is string tag ? tag : ""; comboBoxSubjects.SelectedItem = e.Node.Name; } private void ButtonSave_Click(object sender, EventArgs e) { if (selectedNode != null) { selectedNode.Text = textBoxName.Text; selectedNode.Tag = textBoxContent.Text; selectedNode.Name = comboBoxSubjects.SelectedItem?.ToString(); MessageBox.Show("保存功!"); } else { MessageBox.Show("请先选择一个知识点节点。"); } } } }优化代码
最新发布
07-05
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值