我试图将表单对象从创建它的方法传递给将显示它并在其上设置一些属性的方法,而不是在每个按钮事件中都有smae代码。我得到了错误
“参数1:无法从'ref RWCStatTracker.Fixture.FRMAddFixture'转换为
'ref System.Windows.Forms.Form'“和'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.
}
我在谷歌上发现了很多文章,但没有一篇真正实现我想要实现的目标
任何想法如何使我的工作?
答案 0 :(得分:0)
解决方法1:
而不是:
public void showForm(ref Form frm)
声明你的方法:
public void showForm(ref RWCStatTracker.Fixture.FRMAddFixture frm)
溶液2:
如果RWCStatTracker.Fixture.FRMAddFixture是“可转换”为表单类型 - 在将其作为方法参数传递之前将其转换。
顺便说一句。
就像之前说的那样 - 你不需要这里的引用,所以你可以在你的方法中删除这个关键字。
答案 1 :(得分:0)
尝试使用C#Generic方法:
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
}
}
答案 2 :(得分:0)
使用showForm(frm)解决了这个问题;而不是showForm(ref frm);