C#开发,怎么在关闭窗口时,控制下一个窗口的焦点

u014100815 2017-11-09 02:08:28
情形:有RCVRECEIPT ,和 RCVRCSCAN 窗口,通过RCVRECEIPT 新建了RCVRCSCAN 窗口,然后再RCVRCSCAN 窗口处理完成后,返回RCVRECEIPT ,并且将焦点置于一个项A,如果处理失败,则回到RCVRECEIPT 焦点放到另外一个项B:
RCVRECEIPT 窗口代码:
 
RCVRCSCAN rcvScan = new RCVRCSCAN();
rcvScan.RcvReceipt = this;
rcvScan.ShowDialog();
焦点代码
public void focusCtl()//这里没有写A和B俩种情况,因为重点是焦点代码不起作用
{
messageBox.show("1");
this.A.fouce();
}

RCVRCSCAN 窗口代码
 
传参:
private RCVRECEIPT rcvReceipt;
public RCVRECEIPT RcvReceipt
{
get { return rcvReceipt; }
set { rcvReceipt = value; }
}
关闭:
this.Dispose(); //或者Close()
rcvReceipt.focusCtl();

最后rcvReceipt.focusCtl();方法的message可以打印出来,但是fouce()语句不执行,或者说执行了也没反应,光标停留在第一个窗口RCVRECEIPT跳转之前的地方。
...全文
243 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
u014100815 2017-11-13
  • 打赏
  • 举报
回复
引用 6 楼 hanjun0612 的回复:
[quote=引用 5 楼 u014100815 的回复:] [quote=引用 1 楼 hanjun0612 的回复:] 那你可以使用委托解决这个问题。 Form1
private void button1_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            f2.Show();
            f2.focusAction += Focus;
        }

        public void Focus(bool res)
        {
            if (res)
                textBox1.Focus();
            else
                textBox2.Focus();

        }
Form2

public Action<bool> focusAction;
        private void button1_Click(object sender, EventArgs e)
        {
            bool res = false;
            focusAction(res);
            this.Close();
        }
我用这种方式仍然不行,

   public void Focus(bool res)
        {
            if (res)
               {
               messageBox.show("1");
                textBox1.Focus();
               }
            else
               {
                messageBox.show("2");  
                textBox2.Focus();
              }
        }
在窗口关闭后,这段里面的1或者2都能show出来,但是fouces就是不起作用。应该是执行了的,但是焦点仍然没有指向我写的那个项textBox1。 也不会有其他代码在之后执行指向另外的项,因为光标就是停留在我跳转窗口前的那个项,只要换掉跳转前的焦点项,还是会跟着变的。[/quote] 我给的代码,我测试过,是没问题的。 我想你可能其他的代码影响了。 你试试上面的代码,确认你本机没问题后,在慢慢结合你自己的代码修改[/quote] 恩,好的,我再调试下,谢谢了.
正怒月神 2017-11-13
  • 打赏
  • 举报
回复
引用 5 楼 u014100815 的回复:
[quote=引用 1 楼 hanjun0612 的回复:] 那你可以使用委托解决这个问题。 Form1
private void button1_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            f2.Show();
            f2.focusAction += Focus;
        }

        public void Focus(bool res)
        {
            if (res)
                textBox1.Focus();
            else
                textBox2.Focus();

        }
Form2

public Action<bool> focusAction;
        private void button1_Click(object sender, EventArgs e)
        {
            bool res = false;
            focusAction(res);
            this.Close();
        }
我用这种方式仍然不行,

   public void Focus(bool res)
        {
            if (res)
               {
               messageBox.show("1");
                textBox1.Focus();
               }
            else
               {
                messageBox.show("2");  
                textBox2.Focus();
              }
        }
在窗口关闭后,这段里面的1或者2都能show出来,但是fouces就是不起作用。应该是执行了的,但是焦点仍然没有指向我写的那个项textBox1。 也不会有其他代码在之后执行指向另外的项,因为光标就是停留在我跳转窗口前的那个项,只要换掉跳转前的焦点项,还是会跟着变的。[/quote] 我给的代码,我测试过,是没问题的。 我想你可能其他的代码影响了。 你试试上面的代码,确认你本机没问题后,在慢慢结合你自己的代码修改
u014100815 2017-11-13
  • 打赏
  • 举报
回复
引用 1 楼 hanjun0612 的回复:
那你可以使用委托解决这个问题。 Form1
private void button1_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            f2.Show();
            f2.focusAction += Focus;
        }

        public void Focus(bool res)
        {
            if (res)
                textBox1.Focus();
            else
                textBox2.Focus();

        }
Form2

public Action<bool> focusAction;
        private void button1_Click(object sender, EventArgs e)
        {
            bool res = false;
            focusAction(res);
            this.Close();
        }
我用这种方式仍然不行,

   public void Focus(bool res)
        {
            if (res)
               {
               messageBox.show("1");
                textBox1.Focus();
               }
            else
               {
                messageBox.show("2");  
                textBox2.Focus();
              }
        }
在窗口关闭后,这段里面的1或者2都能show出来,但是fouces就是不起作用。应该是执行了的,但是焦点仍然没有指向我写的那个项textBox1。 也不会有其他代码在之后执行指向另外的项,因为光标就是停留在我跳转窗口前的那个项,只要换掉跳转前的焦点项,还是会跟着变的。
帅猪儿 2017-11-09
  • 打赏
  • 举报
回复
1楼正解,不过我建议用f2.ShowDialog();好一些,防止在操作子界面时跳转到主界面
xiaoyu5425 2017-11-09
  • 打赏
  • 举报
回复
geigecanshubuxingma
正怒月神 2017-11-09
  • 打赏
  • 举报
回复
bool res=false;这个是根据你条件,自己传入true还是false. 委托的方法会根据res执行获取焦点的 textbox1还是textbox2
正怒月神 2017-11-09
  • 打赏
  • 举报
回复
那你可以使用委托解决这个问题。 Form1
private void button1_Click(object sender, EventArgs e)
        {
            Form2 f2 = new Form2();
            f2.Show();
            f2.focusAction += Focus;
        }

        public void Focus(bool res)
        {
            if (res)
                textBox1.Focus();
            else
                textBox2.Focus();

        }
Form2

public Action<bool> focusAction;
        private void button1_Click(object sender, EventArgs e)
        {
            bool res = false;
            focusAction(res);
            this.Close();
        }

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧