我有两个表格Frm1
和Frm2
。
两者都有单textbox
。
在第一个形式textbox
keyup
事件中,如果ENTER
KeyChar
,则打开第二个形式。
现在KeyUp
第二形式textbox
事件中,我将关闭此表格,即提交。
现在调用这两个事件。有没有办法摆脱它?
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
Frm2 frm=new Frm2();
Frm2.RefToForm1=this;
frm.StartPosition = FormStartPosition.CenterParent;
frm.ShowDialog(this);
}
}
现在以第二形式
private void textBox2_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
this.RefToForm1.textBox1.Text=textBox2.Text;
this.Close()
}
}
问题是当我在textBox1
上按回车键时,form2
立即打开和关闭。
任何解决方案
您可以为- 设置Windows Form属性
1- AcceptButton
- 按钮 ID(您必须在哪个按钮上提交。2- CancelButton
- 按钮 ID(您必须在哪个按钮上关闭表单。
理由在textBox1
聚焦且尚未打开Frm2
实例时释放 Enter 键,也会在Frm2
textBox2
引发KeyUp
事件。
是否确定项目中没有导致此行为的附加代码?您是否尝试过在方法textBox2_GotFocus
this.Close()
上放置断点,以查看它是否确实在您的方案中执行?
我什至使用您的代码创建了一个小型示例项目,并进行了一些小的修改以使其工作(在注释中解释):
private void textBox1_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
Frm2 frm=new Frm2();
frm.RefToForm1=this; // you said RefToForm1 isn't static and it shouldn't be
frm.StartPosition = FormStartPosition.CenterParent;
frm.ShowDialog(this);
}
}
private void textBox2_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
this.RefToForm1.textBox1.Text=textBox2.Text;
this.Close(); // missing semicolon
}
}
public Form1 RefToForm1 { get; set; } // property in Frm2
您可以从此处下载此工作示例项目。
表单 2 中定义一个布尔变量,最初将其设置为 false,然后基于该变量关闭表单。您可以稍后在需要时将其设置为 true。可以使用文本框的 GotFocus 方法将其设置为 true。例如
textBox2.GotFocus += textBox2_GotFocus;
在 textBox2_GotFocus 方法中将布尔值设置为 true。您的key_up方法如下所示:
private void textBox2_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
if(boolean_var){
this.RefToForm1.textBox1.Text=textBox2.Text;
this.Close();
}
}
}
如果文本框为空,也许您可以阻止第二个表单关闭 - 假设需要进入某些内容才能关闭。
您能给我们更多关于您打算用这个做什么的信息吗?也许还有另一种方法可以解决您尝试创建的功能。