winforms C#,WinForm在另一个winform中

uz75evzq  于 2022-11-25  发布在  C#
关注(0)|答案(9)|浏览(266)

我需要帮助。我有winform,就像一个显示在图片上,所以我想改善下一件事,当我点击第一个按钮,右侧将显示来自另一个winform的内容,这是可能的吗?我不想使用面板。

vq8itlhq

vq8itlhq1#

为什么不动态地嵌入一个UserControl来表示当前的 * 页面 *,或者如果您想在设计时完成所有工作,那么就嵌入一个自定义的TabControl吧?
显示来自另一个winform的内容
你通常不会将弹出窗口嵌入到另一个窗口中,而会嵌入到控件中。否则你就必须隐藏最小化,最大化,关闭等等。

lh80um4z

lh80um4z2#

MDI Form是最适合您的解决方案。
用途:this.窗体边框样式=系统.窗口.窗体.窗体边框样式.无;`让您的子表单在您的项目中更漂亮!
如果您希望MDI父表单自动调整子表单的大小,您可以像这样撰写程式码。
代码示例:

private void Form1_Load(object sender, EventArgs e)
    {
        IsMdiContainer = true;
    }

    private void btnHotel_Click(object sender, EventArgs e)
    {
        Form2 frm2 = new Form2();
        frm2.Show();
        frm2.MdiParent = this;
    }

    private void btnCaffe_Click(object sender, EventArgs e)
    {
        Form3 frm3 = new Form3();
        frm3.Show();
        frm3.MdiParent = this;
    }
qlvxas9a

qlvxas9a3#

您可以使用TabControl控件-〉对于您想要显示的每个特定内容,您只需向TabControl添加一个TabPage,当选择特定的菜单选项时,只需切换到所需的TabControl页面。

myTabControl.SelectedIndex = 1; // for selecting and displaying page with index 1

要隐藏myTabControl的导航标头,请设置这些属性(在构造函数或Form_Load事件中:

myTabControl.ItemSize = new Size(0, 1); 
myTabControl.SizeMode = TabSizeMode.Fixed;

然后,只显示TabControl页的内容,而不显示导航标题。

0md85ypi

0md85ypi4#

首先从设计时运行时将其设置为this.IsMdiContainer = true;
然后在按钮的click事件处放置以下代码。

childForm frm = new childForm();
        frm.MdiParent = this;    //the current mdi parent form
        frm.FormBorderStyle = FormBorderStyle.None;
        frm.Dock = DockStyle.Fill;

        frm.Show();

output

fcg9iug3

fcg9iug35#

可以使用mdi(多文档界面):当您希望窗体在mainform内部启动时,请使用以下代码:

Dim hotelForm As New HotelForm()
    HotelForm.MdiParent = Me // Me is your parent form want to open hotelForm inside
    HotelForm.Show()
pprl5pva

pprl5pva6#

所有窗体都有一个属性TopLevel,通过将该属性设置为false,就可以将该窗体作为控件处理,并将其添加到面板控件中。
请参见下面的伪代码:

Form2 newForm = new Form2();
newForm.TopLevel = false;

myPanel.Controls.Add(newForm);
newForm.Show();

之后,您的主表单设计应该看起来像一个导航控件,旁边有一个停靠“Fill”的面板,然后单击任何导航按钮,创建所需的表单并将TopLevel设置为false,然后在面板上显示它

owfi6suc

owfi6suc7#

您必须在表单中放置一个容器控件(如面板“pnlHost”),并使用它来显示您想要的任何表单

private Form _currentForme;
    private void ShowForm(Form frm)
    {
        _currentForme?.Close();
        _currentForme = null;
        _currentForme = frm;
        _currentForme.TopLevel = false;
        _currentForme.TopMost = false;
        pnlHost.Controls.Clear();
        _currentForme.FormBorderStyle = FormBorderStyle.None;
        pnlHost.Controls.Add(_currentForme);
        _currentForme.Dock = DockStyle.Fill;
        _currentForme.Show();
    }
ldioqlga

ldioqlga8#

我将使用MDI父级和子级。
但是我想你也可以完成子应用程序,构建exe,然后从父应用程序中启动它作为一个新进程。检查here给定的解决方案。很久以前我尝试过类似的方法,它工作得很完美。

fzsnzjdm

fzsnzjdm9#

将当前窗体设置为MdiParent,然后使用Datagridview显示其他窗体中的数据

相关问题