public partial class Form1 : Form
{
public disp(string strVal)
{
lbl1.text = strVal;
}
private void button1_Click(object sender, EventArgs e)
{
class1 cl = new class1;
cl.Show1("test",this);
}
}
---------------- Class ------------
public class class1
{
private Form frm1;
public void Show1(string xName , object xfrmObj)
{
frm1 = (form) xfrmObj;
frm1.disp(xName ); // here I am getting error .
}
}
------------------------------------------ /
这里我试图从类中访问'disp'函数,我已经将'form1'作为对象传递,但我收到错误
我收到的错误消息是
错误3
'System.Windows.Forms.Form'不包含'disp'的定义 没有扩展方法'disp'接受类型'System.Windows.Forms.Form'的第一个参数可以找到 (您是否缺少using指令或程序集引用?)
vb.net中的这种语法非常完美。
请帮助我.....
拉杰什。
答案 0 :(得分:4)
您需要投放frm1 = (Form1)xfrmObj;
,而不是在form
方法中将其投放到Show1(xName,xfrmObj)
。
编辑: OP已在评论中声明他需要这个以适用于多种不同形式。
您可以使所有表单实现相同的Interface
,如下所示:
public partial class Form1 : Form, ICanDisplay
{
public void disp(string strVal)
{ //...
}
}
public partial class Form2 : Form, ICanDisplay
{
public void disp(string strVal)
{ //...
}
}
public interface ICanDisplay
{
void disp(string strVal);
}
然后,更改您的方法,以便它转换为ICanDisplay:
public class class1
{
private Form frm1;
public void Show1(string xName , object xfrmObj)
{
frm1 = (ICanDisplay) xfrmObj;
frm1.disp(xName);
}
}
但是,正如@Heinzi所说,您应该将Show1方法更改为以下内容:
public void Show1(string xName, IDisplayForm xfrmObj)
{
xfrmObj.Disp(xName);
}
这将使演员完全没必要。下一步是为变量,函数和类选择有意义的名称。