1

私は現在、いくつかのコントロール (textBox) にフォーカスを設定しようとしても何も起こらないという問題に直面しています。 、しかし、それもうまくいきません)

フォーム ログインから、EncryptPSW フォームの新しいインスタンスを起動します

private void openToolStripMenuItem_Click(object sender, EventArgs e)
    {
        EncryptPSW ePSW = new EncryptPSW();
        ePSW.setOsLog(false, this);
        ePSW.ShowDialog();        
    }

ボタン(EncryptPSWフォームにあります)で、イベントをクリックして、fillメソッドを呼び出します

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");}
    }

ログインから保存または開くメソッドを起動します(保存中にフォーカスで何もする必要がないため、私の問題は開くだけです)

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_FormClosed 内から setFocus() を呼び出します。

Form_Closed の場合、奇妙なことに、フォーカスを設定する代わりにそこからメッセージ ボックスを表示しようとすると (問題がどこにあるかを確認するため)、EncryptPSW フォームが閉じられる前に表示されます。

これについての私の唯一の推測は、 EncryptPSW のインスタンスが何らかの形でログインフォームをブロックしており、それがコントロールであるということです

私の問題を十分に説明し、少なくとも少しは意味があることを願っています;]

前もって感謝します、

よろしく、

ルレ

4

2 に答える 2

0

OK、これは私が見た中で最も醜いものかもしれませんが。

使用して

public void setFocus() 
    { 
        textBoxDatabase.Focus(); 
        textBoxDatabase.SelectionStart = textBoxDatabase.TextLength - 1; 
        textBoxDatabase.SelectionLength = 0; 
    } 

でコードを変更してください

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();  

    }  

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);

    }  

これは私のために働いた

(手順の前に「this」を挿入し、行 x を this に変更すると判読可能と思われたようで申し訳ありません)

于 2012-07-02T13:52:14.293 に答える
0

テキストボックスはログイン フォームにあり、そこから 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 
} 
于 2012-07-02T14:00:41.467 に答える