我有一个 WinForms 应用程序。在主窗体中,我编写了一个方法,该方法将清除作为参数传递的任何形式的所有文本框。我想从另一种形式调用这个方法。以下代码是我经过多次试验/错误和浏览本网站后得出的。每次单击新表单的清除所有按钮时都实例化主表单的新版本是一种好习惯吗?如果我要使用它自己的清除所有按钮制作另一个表单,我将不得不通过类似的实践实例化一个新的主表单(除非我将方法设为静态)?任何人都可以建议从不同的表单访问一个表单的方法的替代方法吗?提前谢谢了。
编辑:我知道使方法静态将是一个简单而有效的解决方案,但我很好奇使用非静态方式。
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);
}
}
您不必将 ClearAll 方法设为静态。如果您保留对主窗体的全局引用就足够了。您可以在 Program.cs 中完成。但这并不是最好的方法。
static class Program {
public static Form1 TheForm;
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
TheForm = new Form1();
Application.Run(TheForm);
}
}
再次!仅仅因为它可以做到,并不意味着我会鼓励你这样做。这不符合 OOP 的精神。
如果您想访问 Form1 的方法的唯一原因是清除 TextBoxes,那么我建议创建一个中间类:
public class InterForm : Form
{
public void ClearAll() //CLEAR TEXTBOXES
{
foreach (var box in this.Controls.OfType<TextBox>())
{
box.Text = "";
}
}
}
所有其他形式都应继承自InterForm
.
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句