【发布时间】:2012-07-02 13:28:47
【问题描述】:
我目前面临的问题是,当我尝试将焦点设置在某个控件(文本框)上时,什么都没有发生,也许我只是忽略了一些东西。(在某个地方我发现焦点是“低级”方法并且 select() 应该可以使用,但是效果不好)
从表单登录,我启动 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 中调用 setFocus() 在 EncryptPSW 关闭后调用整个打开过程(从 EncryptPSW_FormClosed 内部) 还有很多,不过我都不记得了。
在 Form_Closed 的情况下,奇怪的是,当我试图从那里显示一个消息框而不是设置焦点时(只是为了看看问题可能出在哪里),它会在 EncryptPSW 表单关闭之前显示。
我对此的唯一猜测是 EncryptPSW 的实例以某种方式阻止了登录表单及其控件
我希望我把我的问题描述得足够好,并且至少有点道理;]
提前致谢,
问候,
蕾丝
【问题讨论】:
-
这不是问题。你的 textBoxDatabase 在哪里??
-
调用 Focus() 时文本框是否可见?
-
那个文本框位于登录表单上,是的,它是可见的