C# 如何在我的主窗体中使用其他窗体的方法?
我想使用其他表单中的一些公共方法。我想知道是否有办法做到这一点,我试图将方法和表单公开,但当我试图将其称为另一种形式的方法时,它似乎什么都没有 这是我的主要表格:C# 如何在我的主窗体中使用其他窗体的方法?,c#,forms,methods,C#,Forms,Methods,我想使用其他表单中的一些公共方法。我想知道是否有办法做到这一点,我试图将方法和表单公开,但当我试图将其称为另一种形式的方法时,它似乎什么都没有 这是我的主要表格: namespace GUI { public partial class frmPrincipal : Form { public frmPrincipal() { InitializeComponent(); } private
namespace GUI
{
public partial class frmPrincipal : Form
{
public frmPrincipal()
{
InitializeComponent();
}
private void categoriaToolStripMenuItem_Click(object sender, EventArgs e)
{
frmCadastroCategoria f = new frmCadastroCategoria();
f.ShowDialog();
f.Dispose();
}
private void categoriaToolStripMenuItem1_Click(object sender, EventArgs e)
{
frmConsultaCategoria f = new frmConsultaCategoria();
f.ShowDialog();
f.Dispose();
}
这就是我试图调用的表单
public void LocalizarCategoria()
{
frmConsultaCategoria f = new frmConsultaCategoria();
f.ShowDialog();
if (f.codigo != 0)
{
DALConexao cx = new DALConexao(DadosDaConexao.StringDeConexao);
BLLCategoria bll = new BLLCategoria(cx);
ModeloCategoria modelo = bll.CarregaModeloCategoria(f.codigo);
txtCodigo.Text = modelo.CatCod.ToString();
txtNome.Text = modelo.CatNome;
alteraBotoes(3);
}
else
{
this.LimpaTela();
this.alteraBotoes(1);
}
f.Dispose();
}
我试着做一些事情,比如:
{
LocalizarCategoria()
}
但是我不能,它只是找不到方法。不要调用该方法,因为它会使表单依赖,而不必依赖。如果一个方法是另一种形式,那么它属于那里是有原因的 您可能想做的是将该方法移动到另一个位置(例如基类) 例如:
public partial class frmPrincipal : MyFormBase // inherit from your own base
{
...
}
public partial class frmMyOtherForm : MyFormBase // inherit from your own base
{
...
}
public class MyFormBase : Form // your own base with the to be shared method
{
protected void LocalizarCategoria() // protected might be enough
{
...
}
}
不要调用该方法,因为它会使表单依赖,而不必依赖。如果一个方法是另一种形式,那么它属于那里是有原因的 您可能想做的是将该方法移动到另一个位置(例如基类) 例如:
public partial class frmPrincipal : MyFormBase // inherit from your own base
{
...
}
public partial class frmMyOtherForm : MyFormBase // inherit from your own base
{
...
}
public class MyFormBase : Form // your own base with the to be shared method
{
protected void LocalizarCategoria() // protected might be enough
{
...
}
}
LocalizarCategoria
是一种实例方法(因为它不是static
)。所以您需要另一个表单的实例,然后您可以这样调用它:
var myOtherForm = new frmOtherForm();
myOtherForm.LocalizarCategoria();
或者,如果LocalizarCategoria
不需要访问任何实例字段、属性或方法,则可以将其设置为静态
:
public static void LocalizarCategoria()
{
// etc..
然后通过引用另一个窗体的类(而不是特定实例)调用它:
LocalizarCategoria
是一种实例方法(因为它不是static
)。所以您需要另一个表单的实例,然后您可以这样调用它:
var myOtherForm = new frmOtherForm();
myOtherForm.LocalizarCategoria();
或者,如果LocalizarCategoria
不需要访问任何实例字段、属性或方法,则可以将其设置为静态
:
public static void LocalizarCategoria()
{
// etc..
然后通过引用另一个窗体的类(而不是特定实例)调用它:
您需要创建要使用的
表单
对象的实例:
var form = new FormThatHasTheMethod_LocalizarCategoria();
form.LocalizarCategoria();
您需要创建要使用的
表单
对象的实例:
var form = new FormThatHasTheMethod_LocalizarCategoria();
form.LocalizarCategoria();
“我想使用其他表单中的一些公共方法。”-不要这样做,因为这会使表单依赖,尽管它们可能不依赖。如果一个方法是另一种形式,那么它就属于那里。您可能想做的是将方法移动到另一个地方(例如基类)。我同意@Quality Catalyst的评论,并建议您接受他的答案,而不是我的答案-在这种情况下,基类想法是一个更好的解决方案。现在还不完全清楚您想要做什么。但有两种明显的可能性,这两种可能性都在之前提出的问题中得到了很好的解决:并且(如果@Quality发布的答案解决了您的问题,那么您的问题就是这些链接中第二个的重复)。“我想使用其他表单中的一些公共方法。”-不要这样做,因为这会使表单依赖,尽管它们可能不依赖。如果一个方法是另一种形式,那么它就属于那里。您可能想做的是将方法移动到另一个地方(例如基类)。我同意@Quality Catalyst的评论,并建议您接受他的答案,而不是我的答案-在这种情况下,基类想法是一个更好的解决方案。现在还不完全清楚您想要做什么。但有两种明显的可能性,并且这两种可能性都通过之前提出的问题得到了很好的解决:和(如果@Quality发布的答案解决了您的问题,那么您的问题就是这些链接中第二个的重复)。可行的解决方案,但使表单相互依赖。我同意,这通常不是一个好的做法;然而,我认为OP需要这种情况。。。我个人会寻找一个更好的解决方案,可能是两种表单都可以使用的静态类,或者基类(如您所建议的),等等。可行的解决方案,但会使表单相互依赖;然而,我认为OP需要这种情况。。。我个人会寻找更好的解决方案,可能是两种表单都可以使用的静态类,或者基类(如您所建议的),等等。可行的解决方案,但会使表单相互依赖。可行的解决方案,OP发布的方法使用了两个字段,这两个字段几乎肯定特定于包含该方法的表单,并且调用了同一类中的两个其他方法,这两个方法中的任何一个都很容易需要相同表单的成员。OP将无法简单地将代码移动到基类中,而不移动大量其他成员(坦率地说,VS设计器无法很好地处理子类
表单对象,因此这样做会带来许多其他麻烦)。是的,正确,这就解释了为什么它应该被从形式中带到一个更合适的地方。像这样的设计会带来长期的麻烦,需要更重的重新分解,因此首先要更好地设计和实施,这样你才能避免以后的返工。好吧,我不得不将20种方法用在另外20种形式中,我认为这样做效率不高,因此,我尝试跳出框框思考,并根据我的需要提出了另一个解决方案。但既然这看起来是最好的解决方案,我就把这个作为最好的答案。感谢您的努力和分享的知识。OP发布的方法使用了两个字段,这两个字段几乎肯定特定于包含该方法的表单,并且调用了同一类中的两个其他方法,其中任何一个都可能很容易需要同一表单的成员。OP将无法简单地将代码移动到基类中,而不移动大量其他成员(坦率地说,VS设计器无法很好地处理子类表单对象,因此这样做会带来许多其他麻烦)。是的,正确,这就解释了为什么它应该从形式中去掉,变成一个更合适的p