2012-07-02 81 views
1

我目前面臨的問題是,當我嘗試將焦點放在一些控件(textBox)上時,什麼也沒有發生,也許我只是忽略了某些東西(某處我發現焦點是「低級別」方法和即選擇()應改爲使用,但是,它不工作,以及)C#WinForms無法設置焦點

從形式登錄,我啓動EncryptPSW形式

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

按鈕(位於EncryptPSW形式)點擊的新實例事件我叫填充方法

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 調用整個開放過程中的EncryptPSW關閉後(從內EncryptPSW_FormClosed) 調用的setFocus()和更多的人,但是我不記住這一切。

在Form_Closed的情況下,奇怪的是,當我試圖從那裏顯示一個消息框而不是設置焦點(只是爲了查看問題的可能位置)時,它顯示在EncryptPSW表單關閉之前。

我這個唯一的猜測是,EncryptPSW的情況下以某種方式阻止登錄形式,它的控制

我希望我說明我的問題不夠好,它使得至少一個位意識;]

在此先感謝,

問候,

Releis

+0

這不是一個概率。你的textBoxDatabase所在的位置? –

+1

是您在調用Focus()時可見的文本框? –

+0

textBox位於登錄表單上,是的,它是可見的 – Releis

回答

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 
} 
+0

當用戶關閉EncryptPSW表單(他misclicked,改變了頭腦或w/e)我不想改變重點 – Releis

+0

@Releis有點混淆你的意思是「改變了心態或w/e「 –

+0

用戶點擊,他想打開存儲的帳戶信息,psw請求表單彈出,但是,他可能會決定不記得他錯了,他實際上並不想這樣做或任何其他原因關閉那種形式。現在清楚了嗎?] – Releis

0

好了,這也許是我看見吧的最醜陋的東西nd這個,但是。

使用

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

    } 

這爲我工作

(對不起,顯然是想插入 「本」 之前的程序更改您的代碼, 一個nd將行x更改爲可記錄)

+0

也許我太愚蠢了,但可以請你使用句子嗎?我根本沒有得到亞:x – Releis

+0

那裏..如果現在沒有意義,我放棄 – BugFinder

+0

工作,thx。如果你不介意,有兩個問題;] 1.那裏有那麼難看的東西? 2.你知道問題是什麼嗎? – Releis