C# WinC窗体无法设置焦点

C# WinC窗体无法设置焦点,c#,winforms,focus,C#,Winforms,Focus,我目前面临的问题是,当我试图在某个控件文本框上设置焦点时,什么都没有发生,也许我只是忽略了一些东西。在某个地方,我发现焦点是低级方法,应该使用select,但是,它不起作用 从表单登录,我启动EncryptPSW表单的新实例 private void openToolStripMenuItem_Click(object sender, EventArgs e) { EncryptPSW ePSW = new EncryptPSW(); ePSW.setOs

我目前面临的问题是,当我试图在某个控件文本框上设置焦点时,什么都没有发生,也许我只是忽略了一些东西。在某个地方,我发现焦点是低级方法,应该使用select,但是,它不起作用

从表单登录,我启动EncryptPSW表单的新实例

private void openToolStripMenuItem_Click(object sender, EventArgs e)
    {
        EncryptPSW ePSW = new EncryptPSW();
        ePSW.setOsLog(false, this);
        ePSW.ShowDialog();        
    }
在EncryptPSW表单上的按钮上,单击事件i调用填充方法

public void fill()
    {
        if (textBoxPSW.Text.Length == 8)//psw has to be 8 chars long
        {
            if (save)//determinating whether save or fetch of data should be done
            { login.launchSave(textBoxPSW.Text,this); }
            else { login.launchOpen(textBoxPSW.Text,this); }
        }
        else { MessageBox.Show("The password must contain 8 characters");}
    }
从登录时启动save或open方法我的问题只是open,因为在保存过程中我不需要对焦点做任何事情

public void launchOpen(string psw,EncryptPSW ePSW)
    {

        ePSW.Close();
        Encryptor.DecryptFile("loggin.bin", psw, this); //decrypting data and setting textBoxes Text property into the fetched ones
        setFocus();

    }
完成所有工作后,应调用setFocus以设置焦点和其他属性

public void setFocus()
    {
        textBoxDatabase.Focus();
        textBoxDatabase.SelectionStart = textBoxDatabase.TextLength - 1;
        textBoxDatabase.SelectionLength = 0;
    }
我尝试了很多不同的方法,比如:

从EncryptPSW\u FormClosed内调用setFocus 从EncryptPSW\u FormClosed中关闭EncryptPSW后调用整个打开进程 还有很多,但是我记不清了

在Form_Closed的例子中,奇怪的是,当我试图从那里显示一个消息框而不是设置焦点来查看问题可能在哪里时,它在EncryptPSW表单关闭之前显示

我唯一的猜测是EncryptPSW的实例以某种方式阻止了登录表单及其控件

我希望我对我的问题描述得足够好,并且至少有一点道理;]

提前感谢,

问候,


relis

好吧,这可能是我在这方面看到的最丑陋的事情,但是

使用

在更改您的代码

public void launchOpen(string psw,EncryptPSW ePSW)  
    {  

        ePSW.Close();  
        Encryptor.DecryptFile("loggin.bin", psw, this); //decrypting data and setting textBoxes Text property into the fetched ones  
        setFocus();  

    }  

这对我有用


很抱歉,您显然认为在执行过程之前插入此项,并将第x行更改为“这是可设置的”

,因为文本框位于登录表单中,并且您正在以对话框子项的形式从中打开EcryptPWS,您的登录表单将无法将焦点设置为任何内容。关闭后需要设置焦点。您可以这样做:

private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
    using(EncryptPSW ePSW = new EncryptPSW())
    {
       ePSW.setOsLog(false, this);
       if (ePSW.ShowDialog() == DialogResult.OK)
       {
           textBoxDatabase.Focus(); 
       }
    }
} 

public void launchOpen(string psw,EncryptPSW ePSW) 
{ 
    ePSW.DialogResult = DialogResult.OK;
    ePSW.Close(); 
    Encryptor.DecryptFile("loggin.bin", psw, this); //decrypting data and setting textBoxes Text property into the fetched ones 
} 

这不是问题。textBoxDatabase所在的位置??调用Focus时,textBoxDatabase是否可见?该文本框位于登录表单上,是的,它是可见的可能是我太笨了,但请使用句子好吗?我一点也听不懂你的意思:xThere。。如果这现在没有意义,我放弃工作,谢谢。如果您不介意的话,请回答两个问题;]1.什么东西这么难看?2.你知道问题出在哪里吗?表单还没有焦点来完成任务,所以它需要排队。这很难看,因为我相信有更好的方法谢谢你的解释。最后一个希望它不会打扰你,你能指出或建议一些更好的方法吗?还是说我要看所有的代码?我喜欢别人告诉我更好的做事方式。。这不是讽刺,我的意思是,当用户关闭了他错误点击的EncryptPSW表单,改变了主意,或者我不想改变的时候,我喜欢改进自己focus@Releis有点困惑你所说的改变主意或w/eUser点击他想要打开存储的账户信息是什么意思,然而psw请求表会弹出,他可能决定不这样做,或者他记得自己打错了,他实际上不想这样做,或者有任何其他原因来关闭表单。现在清楚了吗?;]对不起,我出去了一会儿。同样有效,tvym:]
delegate void settingfocus();
public void launchOpen(string psw,EncryptPSW ePSW)  
    {  

        ePSW.Close();  
        Encryptor.DecryptFile("loggin.bin", psw, this); //decrypting data and setting textBoxes Text property into the fetched ones  
    settingfocus sf = new settingfocus(setFocus);
    this.BeginInvoke(sf);

    }  
private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
    using(EncryptPSW ePSW = new EncryptPSW())
    {
       ePSW.setOsLog(false, this);
       if (ePSW.ShowDialog() == DialogResult.OK)
       {
           textBoxDatabase.Focus(); 
       }
    }
} 

public void launchOpen(string psw,EncryptPSW ePSW) 
{ 
    ePSW.DialogResult = DialogResult.OK;
    ePSW.Close(); 
    Encryptor.DecryptFile("loggin.bin", psw, this); //decrypting data and setting textBoxes Text property into the fetched ones 
}