如何从不同的类访问表单函数

时间:2011-12-25 22:28:37

标签: c# winforms visual-studio desktop-application

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中的这种语法非常完美。

请帮助我.....

拉​​杰什。

1 个答案:

答案 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);
}

这将使演员完全没必要。下一步是为变量,函数和类选择有意义的名称。