帮帮忙啊 大侠们 splitContainer的 Panel 焦点问题啊

时间:2021-05-29 19:57:07
我怎么不 能获得焦点啊 
    private void UserToolStripMenuItem_Click(object sender, EventArgs e)
        {
            foreach (Form fr in this.splitContainer1.Panel2.Controls)
            {
                if (fr is frmUserInfor)(能进判断,就是获得不了,业不报错,汗~)
                {
                    fr.Activate();(Focus())都试过了 
                    return;
                }
            }

            frmUserInfor frmuser = new frmUserInfor();
            frmuser.WindowState = FormWindowState.Maximized;
            frmuser.MdiParent = this;
            this.splitContainer1.Panel2.Controls.Add(frmuser);          
            frmuser.Show();
            frmuser.Dock = DockStyle.Fill;
        }

21 个解决方案

#1


up

#2


用如下的语句试试看:

this.splitContainer1.Panel2.Controls.SetChildIndex(fr,0);

#3


是放在判断里面吗?

#4


是的

#5


好  
hbxtlhx(平民百姓-自已动手,丰衣足食
你已经有10分拉
还有一个问题啊 

主界面A
 private void pictureBox3_Click(object sender, EventArgs e)
        {
            foreach (Form fra in this.splitContainer1.Panel2.Controls)
            {
                if (fra is FormPxb)
                {
                    this.splitContainer1.Panel2.Controls.SetChildIndex(fra, 0);
                    fra.Activate();
                    return;
                }
            }

            FormPxb frmpxb = new FormPxb();
            frmpxb.WindowState = FormWindowState.Maximized;
            frmpxb.MdiParent = this;
            this.splitContainer1.Panel2.Controls.Add(frmpxb);
            frmpxb.Show();
            frmpxb.Dock = DockStyle.Fill;

        }

界面FormPxb 
  上面加了一个 panel
        private void pictureBox2_Click(object sender, EventArgs e)
        {
            foreach (Control fr in this.panel1.Controls)
            {
                if (fr is frmEquipmentInfor)
                {
                    this.panel1.Controls.SetChildIndex(fr, 0);
                    fr.Focus();
                    return;
                }
            }

            frmEquipmentInfor frmE = new frmEquipmentInfor();
            frmE.WindowState = FormWindowState.Maximized;
            frmE.MdiParent = frmmain;
            this.panel1.Controls.Add(frmE);         
            frmE.Show();
            frmE.Dock = DockStyle.Fill;
        }
A界面的事件 能触发 能show出 界面FormPxb ,当界面FormPxb 里面show出界面frmEquipmentInfor 后,,再触发A界面的事件  每次都show出界面frmEquipmentInfor ,界面FormPxb 
根本不出来,我搞了半个下午了,每次都是界面frmEquipmentInfor得焦点,我纳闷得很
麻烦你再看看啊  小弟在线等你

#6


等啊等啊 解决有分那……

#7


没有太明白frmEquipmentInfor 和FormPxb 的关系。。。

#8


等等啊

#9


frmEquipmentInfor 和FormPxb

FormPxb 里面的一个相当于按钮事件 show 出 frmEquipmentInfor界面啊

#10


show 出 frmEquipmentInfor界面后,楼主的意思是想当激活FormPxb 的时候要FormPxb 和frmEquipmentInfor一起显示并且frmEquipmentInfor显示在FormPxb之上吗?

#11


不是一起显示啊,只需要激活 FormPxb  就行了 
可是 每次都是激活frmEquipmentInfor,有点莫明其妙啊

#12


A 触发B  B 触发C后 

A想触发B,可是却总是显示C

#13


大致意思 还是 原先的 那种焦点问题啊

#14


看不出什么问题,可能没有你的那个真实环境不好想像。不好意思。

#15


好吧 先给你10分 等我写了详细点 你再帮我吧

#16


结帖了哦  大虾)

#17


分已经给了啊
问题是
“show 出 frmEquipmentInfor界面后,楼主的意思是想当激活FormPxb 的时候要FormPxb 和frmEquipmentInfor一起显示并且frmEquipmentInfor显示在FormPxb之上吗?”

改成……一起显示并且FormPxb显示在frmEquipmentInfor上啊

大侠看见 再帮忙一下啊  在线等

#18


做为Mdi子窗体后,这个窗体不会再有像OwnerForm一样的效果了。
如果是非Mdi窗体,那么对一个窗体可以使用AddOwnerForm来添加一个类似楼主说的窗体,但是一但这个窗体是Mdi类型的,那么就没有了那个效果。实际上这个要靠一些事件及代码手动的来实现了。比如先激活FormPxb窗体使其放到所有窗体最上,然后跟着再激活frmEquipmentInfor窗体,使它处于所有窗体最上。

但是我又糊涂了,看楼主的意思是说激活FormPxb后frmEquipmentInfor自动的显示到了最上了,这我就不知道了,应该是激活FormPxb后FormPxb就是最前面了,我说的激活,是指使用SetChildIndex(fr, 0)方法后再Active。

#19


是啊  我就是这样激活的啊 按你的方法啊
可是 以激活 它就始终显示frmEquipmentInfor(只要你之前点击过FormPxb上的按钮show出过frmEquipmentInfor)

splitContainer左边panel1 右边panel2
左边内(panel1)的按钮show 出窗体FormPxb 放在右边panel2上,FormPxb(有个panel ,按钮在panel内) 上的按钮show出frmEquipmentInfor后仍然放在panel2上,现在 我想在点左边内的按钮show出FormPxb,它就始终显示frmEquipmentInfor,同时 这些控件窗体 都在一个子窗体frmmain内

两段主要代码
frmmain上的
 private void pictureBox3_Click(object sender, EventArgs e)
        {
            foreach (Form fra in this.splitContainer1.Panel2.Controls)
            {
                if (fra is FormPxb)
                {
                    this.splitContainer1.Panel2.Controls.SetChildIndex(fra, 0);
                    fra.Activate();
                    return;
                }
            }

            FormPxb frmpxb = new FormPxb();
            frmpxb.WindowState = FormWindowState.Maximized;
            frmpxb.MdiParent = this;
            this.splitContainer1.Panel2.Controls.Add(frmpxb);
            frmpxb.Show();
            frmpxb.Dock = DockStyle.Fill;

        }

FormPxb上的

        private void pictureBox2_Click(object sender, EventArgs e)
        {
            frmEquipmentInfor frmE = new frmEquipmentInfor();
            frmE.WindowState = FormWindowState.Maximized;
            frmE.MdiParent = frmmain;
            this.panel1.Controls.Add(frmE);
            frmE.Show();
            frmE.Dock = DockStyle.Fill;
        }

麻烦你拉


#20


"它就始终显示frmEquipmentInfor……"这段话也就是你点左边panel1内的按钮它始终没反应

但是如果你在frmmain内的 其他按钮show出一个另外的 窗体放在panel2上 
你再点panel1内的按钮它就始终显示frmEquipmentInfor了

汗~~
真不好意思

#21


等会发到你邮箱吧

#1


up

#2


用如下的语句试试看:

this.splitContainer1.Panel2.Controls.SetChildIndex(fr,0);

#3


是放在判断里面吗?

#4


是的

#5


好  
hbxtlhx(平民百姓-自已动手,丰衣足食
你已经有10分拉
还有一个问题啊 

主界面A
 private void pictureBox3_Click(object sender, EventArgs e)
        {
            foreach (Form fra in this.splitContainer1.Panel2.Controls)
            {
                if (fra is FormPxb)
                {
                    this.splitContainer1.Panel2.Controls.SetChildIndex(fra, 0);
                    fra.Activate();
                    return;
                }
            }

            FormPxb frmpxb = new FormPxb();
            frmpxb.WindowState = FormWindowState.Maximized;
            frmpxb.MdiParent = this;
            this.splitContainer1.Panel2.Controls.Add(frmpxb);
            frmpxb.Show();
            frmpxb.Dock = DockStyle.Fill;

        }

界面FormPxb 
  上面加了一个 panel
        private void pictureBox2_Click(object sender, EventArgs e)
        {
            foreach (Control fr in this.panel1.Controls)
            {
                if (fr is frmEquipmentInfor)
                {
                    this.panel1.Controls.SetChildIndex(fr, 0);
                    fr.Focus();
                    return;
                }
            }

            frmEquipmentInfor frmE = new frmEquipmentInfor();
            frmE.WindowState = FormWindowState.Maximized;
            frmE.MdiParent = frmmain;
            this.panel1.Controls.Add(frmE);         
            frmE.Show();
            frmE.Dock = DockStyle.Fill;
        }
A界面的事件 能触发 能show出 界面FormPxb ,当界面FormPxb 里面show出界面frmEquipmentInfor 后,,再触发A界面的事件  每次都show出界面frmEquipmentInfor ,界面FormPxb 
根本不出来,我搞了半个下午了,每次都是界面frmEquipmentInfor得焦点,我纳闷得很
麻烦你再看看啊  小弟在线等你

#6


等啊等啊 解决有分那……

#7


没有太明白frmEquipmentInfor 和FormPxb 的关系。。。

#8


等等啊

#9


frmEquipmentInfor 和FormPxb

FormPxb 里面的一个相当于按钮事件 show 出 frmEquipmentInfor界面啊

#10


show 出 frmEquipmentInfor界面后,楼主的意思是想当激活FormPxb 的时候要FormPxb 和frmEquipmentInfor一起显示并且frmEquipmentInfor显示在FormPxb之上吗?

#11


不是一起显示啊,只需要激活 FormPxb  就行了 
可是 每次都是激活frmEquipmentInfor,有点莫明其妙啊

#12


A 触发B  B 触发C后 

A想触发B,可是却总是显示C

#13


大致意思 还是 原先的 那种焦点问题啊

#14


看不出什么问题,可能没有你的那个真实环境不好想像。不好意思。

#15


好吧 先给你10分 等我写了详细点 你再帮我吧

#16


结帖了哦  大虾)

#17


分已经给了啊
问题是
“show 出 frmEquipmentInfor界面后,楼主的意思是想当激活FormPxb 的时候要FormPxb 和frmEquipmentInfor一起显示并且frmEquipmentInfor显示在FormPxb之上吗?”

改成……一起显示并且FormPxb显示在frmEquipmentInfor上啊

大侠看见 再帮忙一下啊  在线等

#18


做为Mdi子窗体后,这个窗体不会再有像OwnerForm一样的效果了。
如果是非Mdi窗体,那么对一个窗体可以使用AddOwnerForm来添加一个类似楼主说的窗体,但是一但这个窗体是Mdi类型的,那么就没有了那个效果。实际上这个要靠一些事件及代码手动的来实现了。比如先激活FormPxb窗体使其放到所有窗体最上,然后跟着再激活frmEquipmentInfor窗体,使它处于所有窗体最上。

但是我又糊涂了,看楼主的意思是说激活FormPxb后frmEquipmentInfor自动的显示到了最上了,这我就不知道了,应该是激活FormPxb后FormPxb就是最前面了,我说的激活,是指使用SetChildIndex(fr, 0)方法后再Active。

#19


是啊  我就是这样激活的啊 按你的方法啊
可是 以激活 它就始终显示frmEquipmentInfor(只要你之前点击过FormPxb上的按钮show出过frmEquipmentInfor)

splitContainer左边panel1 右边panel2
左边内(panel1)的按钮show 出窗体FormPxb 放在右边panel2上,FormPxb(有个panel ,按钮在panel内) 上的按钮show出frmEquipmentInfor后仍然放在panel2上,现在 我想在点左边内的按钮show出FormPxb,它就始终显示frmEquipmentInfor,同时 这些控件窗体 都在一个子窗体frmmain内

两段主要代码
frmmain上的
 private void pictureBox3_Click(object sender, EventArgs e)
        {
            foreach (Form fra in this.splitContainer1.Panel2.Controls)
            {
                if (fra is FormPxb)
                {
                    this.splitContainer1.Panel2.Controls.SetChildIndex(fra, 0);
                    fra.Activate();
                    return;
                }
            }

            FormPxb frmpxb = new FormPxb();
            frmpxb.WindowState = FormWindowState.Maximized;
            frmpxb.MdiParent = this;
            this.splitContainer1.Panel2.Controls.Add(frmpxb);
            frmpxb.Show();
            frmpxb.Dock = DockStyle.Fill;

        }

FormPxb上的

        private void pictureBox2_Click(object sender, EventArgs e)
        {
            frmEquipmentInfor frmE = new frmEquipmentInfor();
            frmE.WindowState = FormWindowState.Maximized;
            frmE.MdiParent = frmmain;
            this.panel1.Controls.Add(frmE);
            frmE.Show();
            frmE.Dock = DockStyle.Fill;
        }

麻烦你拉


#20


"它就始终显示frmEquipmentInfor……"这段话也就是你点左边panel1内的按钮它始终没反应

但是如果你在frmmain内的 其他按钮show出一个另外的 窗体放在panel2上 
你再点panel1内的按钮它就始终显示frmEquipmentInfor了

汗~~
真不好意思

#21


等会发到你邮箱吧