有 3 个表单 MainForm()、Form1(MainForm())、Form2(),在 Form 1 中 MainForm 通过构造函数传递,我需要从 Form2() 更新 TextEdit Form1()。我制作了一个不接受任何参数的空 Form1 构造函数,当应用程序启动时,与另一个表单中的按钮交互时,您需要不断关注 textEdit
在代码中它看起来像这样:在 Form1() 中:
public Form1()
{
InitializeComponent();
Testi();
}
public void Testi()
{
this.searchTextEdit.Text = "";
this.searchTextEdit.Focus();
}
请帮助我在 Form1() 中调用时正确地将焦点放在 Form2() 中的 TextEdit 中,谢谢。
表格2:
Form2()
{
Form1 test = new Form1;
Action showMethod = test.Testi;
showMethod();
}
我尝试通过Action委托来做,但问题是焦点仍然没有放在输入字段中
您只需在调用对话框后将焦点返回到输入字段。
从第二种形式中取出所有拐杖。
就是这样,一切都应该是干净的。
现在,在第二个对话框窗体的调用方法中,有一段你没有显示的代码,但我会自己尝试拿出来。
这就是所有的魔法。
最明显的解决方案是将方法引用(委托)传递给表单的构造函数。我建议您阅读 - https://metanit.com/sharp/tutorial/3.13.php。
作为一种选择,您可以在所有这些困难上得分并使用现成的 Action 或 Func 代表。链接 - https://metanit.com/sharp/tutorial/3.33.php。
因此,您将对该方法的引用作为参数传递给构造函数并在正确的时间调用它。
至于我,提交整个表单并不完全正确,因为。这已经是一个单独的对象,在我看来,它应该尽可能与另一种形式隔离
升级版:
public void GetSomething(Action action, string YYY) => action.Invoke(YYY);
此 GetSomething 方法接受一个 void 方法,作为您需要向其传递字符串的参数。
public int ReturnSomething(Func<string, int> func, string YYY) => func.Invoke(YYY);
此 ReturnSomething 方法接受一个返回 int 并将字符串作为参数的方法。
因此,您需要在构造函数中指定 Func 或 Action 并传递它们。使用 Invoke() 调用。