首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mdichild表单不显示

mdichild表单不显示
EN

Stack Overflow用户
提问于 2013-09-03 14:26:03
回答 3查看 1.9K关注 0票数 1

我已经设计了一堆mdichild表单,并希望将这些表单显示为mdichild。我将主表单设置为mdi,并且能够正确地将其中一个表单显示为mdichild。给我惹麻烦的代码是:

代码语言:javascript
复制
    public partial class KeyboardSettingsForm : Form
    {
        private mainForm _mForm;

        public KeyboardSettingsForm()
        {
            InitializeComponent();
            _mForm = new mainForm(); //<---mdiparent
            this.MdiParent = _mForm; //<---Commenting out this line shows the form

            this.Shown += new System.EventHandler(this.KeyboardSettingsForm_Shown);

        }
    }

我不知道为什么,如果我评论掉:this.MdiParent = _mForm;表单将显示(但不是作为一个mdichild)。如果代码完好无损,表单就会拒绝显示。我怎么才能把那张表格显示成一个小东西呢?

更新的工作代码

代码语言:javascript
复制
public partial class mainForm : Form
{
    private NavigationForm _navForm;
    public mainForm()
    {
        InitializeComponent();


        this.Shown += new System.EventHandler(this.mainForm_Shown);

    }

    private void mainForm_Shown(object sender, EventArgs e)
    {
        _navForm = new NavigationForm(this);
        _navForm.MdiParent = this;
        _navForm.Show();
    }

    private void mainForm_Load(object sender, EventArgs e)
    {

    }

}

public partial class NavigationForm : Form
{

    private KeyboardSettingsForm _wKeyboard;

    public NavigationForm(Form frm)
    {
        InitializeComponent();

        _wKeyboard = new KeyboardSettingsForm(frm);


    }

    private void NavigationForm_Load(object sender, EventArgs e)
    {

    }

    private void keyboardPictureBox_Click(object sender, EventArgs e)
    {
        _wKeyboard.Show();

    }

}

public partial class KeyboardSettingsForm : Form
{
    private Form _mdiParent;

    public KeyboardSettingsForm(Form frm)
    {
        InitializeComponent();
        _mdiParent = frm;
        this.MdiParent = frm;

        this.Shown += new System.EventHandler(this.KeyboardSettingsForm_Shown);

    }

    private void KeyboardSettingsForm_Load(object sender, EventArgs e)
    {
        MessageBox.Show(_mdiParent.Name);
    }

    private void KeyboardSettingsForm_Shown(object sender, EventArgs e)
    {

    }
}
EN

回答 3

Stack Overflow用户

发布于 2013-09-03 14:28:35

您需要使mForm成为mdi容器:

代码语言:javascript
复制
mForm.IsMdiContainer = true;
票数 1
EN

Stack Overflow用户

发布于 2013-09-03 14:36:19

您需要显式地显示主表单如下:

代码语言:javascript
复制
_mForm = new mainForm();
this.MdiParent = _mForm;

this.Shown += this.KeyboardSettingsForm_Shown;

_mForm.Show(); // show mdi-parent explicitly because only the application's start-up form shows automatically.
票数 1
EN

Stack Overflow用户

发布于 2013-09-03 14:36:30

你是说谁是KeyboardSettingsForm的父母,但你在向父母展示什么?

代码语言:javascript
复制
_mForm = new mainForm(); //<---mdiparent not shown :(
this.MdiParent = _mForm;

尝尝这个

代码语言:javascript
复制
_mForm = new mainForm();
_mForm.Show();//show your parent first
this.MdiParent = _mForm;

但是即使在上面的代码也没有什么意义。你是故意这样做的吗?

代码语言:javascript
复制
public partial class KeyboardSettingsForm : Form
{
    private mainForm _mForm;

    public KeyboardSettingsForm(mainForm mForm)
    {
        InitializeComponent();
        this._mForm = mForm;//Did you mean this?
        this.MdiParent = _mForm;

        this.Shown += new System.EventHandler(this.KeyboardSettingsForm_Shown);

    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18594799

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档