【问题标题】:How to access a form function from a different class如何从不同的类访问表单函数
【发布时间】:2011-12-25 22:28:36
【问题描述】:
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);

        }

}

---------------- 类 ------------

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”的定义 并且找不到接受“System.Windows.Forms.Form”类型的第一个参数的扩展方法“disp” (您是否缺少 using 指令或程序集引用?)

vb.net 中的这种语法运行良好。

请帮帮我.....

拉杰什。

【问题讨论】:

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


    【解决方案1】:

    您需要在您的Show1(xName,xfrmObj) 方法中将frm1 = (Form1)xfrmObj; 转换为form

    编辑: 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);
    }
    

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

    【讨论】:

    • 不客气。如果可行,请将此帖子标记为您问题的答案。
    • 感谢您的回复...它的工作完美。但是这个函数访问不同的表单。所以我不能转换表单名称。请问还有其他选择吗?拉杰什
    • @RajeshAbraham 我已经编辑了我的答案,以便可以在多个表单上调用该函数。
    • 如果使用 c#4.0:动态 frm2 = xfrmObj;frm2.disp(xName);
    • Dynamic 非常聪明.. 但实际上你应该避免使用,除非在适当的地方。这不是合适的情况,“正确”的答案是使用接口
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-28
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多