我目前面临的问题是,当我尝试将焦点设置在一些控件(textBox)上时,没有任何反应,也许我只是忽略了一些东西。(某处我发现焦点是“低级”方法而且select()应该但是,它可以用来代替它。
从表单登录,我启动了EncryptPSW表单的新实例
private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
EncryptPSW ePSW = new EncryptPSW();
ePSW.setOsLog(false, this);
ePSW.ShowDialog();
}
On按钮(位于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");}
}
从Login启动保存或打开方法(我的问题只是打开,因为在保存期间我不需要对Focus做任何事情)
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的实例以某种方式阻止了登录表单及其控件
我希望我能很好地描述我的问题并且至少有点意义;]
提前致谢,
此致
Releis
答案 0 :(得分:0)
好吧这可能是我看到的最丑陋的事情,但是。
使用
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行更改为合法)
答案 1 :(得分: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
}