【发布时间】:2018-11-13 07:25:33
【问题描述】:
我有一个 WinForms 应用程序。在主窗体中,我编写了一个方法,该方法将清除作为参数传递的任何形式的所有文本框。我想从另一种形式调用这个方法。以下代码是我经过多次试验/错误并浏览此站点后得出的。每次单击新表单的全部清除按钮时都实例化主表单的新版本是一种好习惯吗?如果我要使用它自己的 clear all 按钮制作另一个表单,我将不得不通过类似的做法实例化一个新的主表单(除非我将方法设为静态)?任何人都可以建议从不同表单访问一个表单方法的替代方法吗?提前谢谢了。
编辑:我知道将方法设为静态将是一种简单有效的解决方案,但我对使用非静态方法感到好奇。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void ClearAll(Form formToClear) //CLEAR TEXTBOXES
{
foreach (var box in formToClear.Controls.OfType<TextBox>())
{
box.Text = "";
}
}
}
public partial class NewItemForm : Form
{
public NewItemForm()
{
InitializeComponent();
}
private void clearAllButton_Click(object sender, EventArgs e)
{
Form1 mainForm=new Form1();
mainForm.ClearAll(this);
}
}
【问题讨论】:
-
只需创建一个
static实用函数,它将清除Form的TextBoxes -
这个方法必须是主窗体的成员有什么原因吗?为什么不单独的静态类?为什么不创建一个继承自 Form 的中间类,而所有其他的都将从该类继承?
-
不,创建主窗体的新实例根本不是好主意。