【发布时间】:2015-11-11 13:50:16
【问题描述】:
我只是想问一下这是否是在主窗体上显示/隐藏用户控件的好方法。
我有带有 3 个按钮(按钮 1、按钮 2、按钮 3)的 form1,我有用户控件(用户控件 1、用户控件 2、用户控件 3,它们什么都不包含)。
现在单击按钮 1 和用户控件 1 显示,单击按钮 2 和用户控件 2 显示并且用户控件 1 隐藏......等等(所以每次单击按钮时用户控件显示并隐藏其余按钮。
我使用了以下代码,它可以按我的意愿完美运行,但我的问题是:
UserControl.BringToFront() 函数将用户控件带到前面,每次单击按钮时,它都会将该用户控件带到前面,那么其他用户控件会发生什么情况呢?我的意思是BringToFront() 将每个用户控件放在另一个之上,并且不会删除任何以前的用户控件。我觉得缺少一些东西,比如“删除”功能来删除以前的 UserControl。如果我留下这样的代码会发生什么(没有“删除”功能?请帮忙。谢谢。
这是代码,效果很好:
- 用户 control1 名称是 UC1
- 用户 control2 名称为 UC2
-
用户 control2 名称是 UC3
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { UC1 uc1 = new UC1(); Controls.Add(uc1); uc1.BringToFront(); } private void button2_Click(object sender, EventArgs e) { UC2 uc2 = new UC2(); Controls.Add(uc2); uc2.BringToFront(); } private void button3_Click(object sender, EventArgs e) { UC3 uc3 = new UC3(); Controls.Add(uc3); uc3.BringToFront(); } }
【问题讨论】:
-
它不会将“那个”用户控件带到前面,而是每次都将一个新的用户控件带到前面。所以不,这不是显示/隐藏用户控件的正确方法。您是否查看了 Show 和 Hide 方法或 Visible 属性?
-
好吧,显然其他 UserControls 仍然存在——请注意,您可以使用 Tab 切换到它们。你已经在使用
Controls.Add;你没注意到Controls.Remove? -
很明显,他们将不再排在前面。如果您在 Z 顺序中推回的那个大于您带到前面的那个,那么您仍然可以看到它的边缘。明智的做法是在前一个上调用 Dispose() 方法。 从不调用 Remove(),这会泄漏控制并最终使您的程序崩溃。您现在正在做的事情是泄漏的,但至少它不是致命的,当用户关闭窗口时它们仍然会被释放。
-
为什么不静态创建按钮并在每个点击处理程序中相应地设置 visible=false?
-
嗨 Lasse V. Karlsen。是的,我使用了显示/隐藏,但只是想知道如何删除控件