我正在构build一个儿童学习应用程序,点击面板上的button,我想在面板的相同位置显示不同的表单。 你可以请帮助任何步行或教程链接?
这个问题应该已经发布在Stackoverflow网站而不是在这里。
但是你可以用这个方法来处理这个事件。
subForm = new SubFormYouWantToLoad(); subForm.TopLevel = false; subForm.FormBorderStyle = FormBorderStyle.None; ContainerPanel.Controls.Add(subForm , 0, 1); subForm .Visible = true;
您可以添加此代码,当你点击特定的按钮。 这里每个子窗体都作为一个控件添加到Panel中。 在添加另一个子窗体之前,应该从面板的控制列表中删除子窗体。 为此,最好删除,关闭和处置第一个。
ContainerPanel.Controls.Remove(activeform); activeform.Close(); activeform.Dispose();
使用用户控件并将其加载到面板中,而不是使用表单
示例,如果你想显示usercontrol1
panel1.Controls.Clear(); panel1.Visible = true; UserControl1 usr1 = new UserControl1(); usr1.Show(); panel1.Controls.Add(usr1);
如果usercontrol2
panel1.Controls.Clear(); panel1.Visible = true; UserControl1 usr2 = new UserControl2(); usr2.Show(); panel1.Controls.Add(usr2);
您可以创建多个表单作为用户控件或从面板继承的控件。 然后有一个面板的父窗体来保存用户控件。 当面板需要更改时,您可以更改容器中的活动用户控件。
有一个关于MSDN的教程来创建用户控件。
http://msdn.microsoft.com/en-us/library/a6h7e207(v=vs.71).aspx
我用这个代码来关闭面板上的窗体,但不工作..
private void button12_Click(object sender, EventArgs e) { dontShowPANEL(); //ActiveForm.Close(); MainImaginCp kj = new MainImaginCp(); //kj.Visible = false; kj.panel2.Controls.Clear(); panel1.Visible = true; EngABCLearning usr1 = new EngABCLearning(); usr1.Show(); kj.panel2.Controls.Add(usr1); //kj.Focus(); }
我用下面的代码在面板中显示表单。
private void toolStripMenuItem1_LR_ENG_Click(object sender, EventArgs e) { //kids.Form2 hj = new kids.Form2(); //hj.Show(); EngABCLearning gh = new EngABCLearning(); //gh.Show(); gh.TopLevel = false; gh.FormBorderStyle = FormBorderStyle.None; //Panel2.Controls.Add(subForm, 0, 1); panel2.Controls.Add(gh); gh.Visible = true; }
这是关闭我的主要形式,并退出申请。
试试这个我已经加载了一个面板内的两个表单
private void Form1_Load(object sender, EventArgs e) { Form2 f1 = new Form2(); f1.TopLevel = false; f1.AutoScroll = true; panel1.Controls.Add(f1); f1.Dock = DockStyle.Left; f1.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; f1.Show(); //form2 Form3 f2 = new Form3(); f2.TopLevel = false; f2.AutoScroll = true; panel1.Controls.Add(f2); f2.Dock = DockStyle.Left; f2.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; f2.Show(); }