我试图将一个表单对象从创建它的方法传递给一个显示它并设置一些属性的方法,而不是在每个按钮事件中都有smae代码。我收到错误
"参数1:无法从"ref RWCStatTracker.Fixture.FRMAddFixture"转换为
"ref System.Windows.Forms.Form"one_answers"与"RWCStatTracker.Form1.showForm(ref System.Windows.Forms.Form)"匹配的最佳重载方法具有一些无效参数"
这些发生在按钮点击事件的第70行,其中它具有showForm(ref frm)
;
以下是代码:
public void addToolStripMenuItem3_Click(object sender, EventArgs e)
{
RWCStatTracker.Fixture.FRMAddFixture frm = new RWCStatTracker.Fixture.FRMAddFixture();
showForm(ref frm);
}
public void showForm(ref Form frm)
{
frm.TopLevel = false; //set it's TopLevel to false
Controls.Add(frm); //and add it to the parent Form
frm.Show(); //finally display it
frm.BringToFront(); //use this it there are Controls over your form.
}
我在谷歌上发现了很多文章,但没有一篇真正实现了我试图实现的
你知道我该怎么做吗?
解决方案1:
代替:
public void showForm(ref Form frm)
像这样声明你的方法:
public void showForm(ref RWCStatTracker.Fixture.FRMAddFixture frm)
解决方案2:
如果RWCStatTracker.Fixture.FRMAddFixture"可转换"为Form Type-在将其作为方法参数传递之前进行转换。
顺便说一句。
就像前面说的那样-这里不需要refs,所以你可以在你的方法中去掉这个关键字。
尝试使用C#通用方法:
RWCStatTracker.Fixture.FRMAddFixture frm = new RWCStatTracker.Fixture.FRMAddFixture();
showForm<RWCStatTracker.Fixture.FRMAddFixture>(ref frm);
public static void showForm<T>(ref T frm) where T:class
{
if (typeof(T) is RWCStatTracker.Fixture.FRMAddFixture)
{
//add logic here
}
}
使用showForm(frm)修复了问题;而不是showForm(参考frm);