Как получить доступ к функции формы из другого класса - PullRequest
0 голосов
/ 26 декабря 2011
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 'function from class, и я передал' form1 'как объект, но я получаю сообщение об ошибке

Я получаю сообщение об ошибке:

Ошибка 3
'System.Windows.Forms.Form »не содержит определения для« disp », и метод расширения« disp », принимающий первый аргумент типа« System.Windows.Forms.Form », не найден (вы пропустили директиву using илиссылка на сборку?)

этот синтаксис в vb.net работает отлично.

, пожалуйста, помогите мне .....

Раджеш.

1 Ответ

4 голосов
/ 26 декабря 2011

вам нужно привести frm1 = (Form1)xfrmObj; вместо form в вашем Show1(xName,xfrmObj) методе.

РЕДАКТИРОВАТЬ: ОП заявил в комментарии, что ему нужно этоработать для нескольких разных форм.Вы можете сделать так, чтобы все ваши формы реализовывали один и тот же 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);
}

, что сделает приведение совершенно ненужным.Следующим шагом является выбор значимых имен для ваших переменных, функций и классов .

...