Соединение Program.cs и Form.cs - PullRequest
3 голосов
/ 31 мая 2011

У меня в Form.cs есть функция, которую я хочу вызвать в моей программе.cs

Но если функция не является статической, program.cs не может использовать ее. И если он статический, Form.cs не может его использовать, потому что он включает элементы управления, которые не являются статичными.

Я могу удалить свой код program.cs и найти способ сделать то же самое в моем form.cs, но мне было интересно, есть ли более простой способ.

Это обычно то, что делает функция в form.cs

public void Toggle()
    {
        MyDomainUpDown.SelectedIndex = 3;
    }

Программа .cs:

MainForm.Toggle();

Ответы [ 3 ]

3 голосов
/ 31 мая 2011

Почему вы не можете получить к нему доступ из вашего program.cs?

Вы можете легко определить переменную для хранения формы, а затем сослаться на нее:

static class Program
{
    // Any method can now access the form
    static Form1 MyForm;

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        MyForm = new Form1();
        Application.Run(MyForm);
    }

}
0 голосов
/ 31 мая 2011

Я не уверен, какова ваша ситуация, но если у вас нет ссылки на myForm, почему или когда вы хотите вызвать любой нестатический метод, определенный в MyForm?

Если, с другой стороны, у вас естьссылку на него, затем просто сделайте MyFunction общедоступным и обычно вызывайте его:

 class Program
 {
     MyForm myForm = new MyForm();
     ....
     myForm.MyFunction(); //call here
 }

 public partial class MyForm: Form
 {
     ....
     public int MyFunction() {...}
 }

Вы также можете сделать его статическим и добавить ссылку на экземпляр MyForm в аргументах функции, если она былапрактическая причина для этого.

 public partial class MyForm: Form
 {
     ....
     public static int MyFunction(MyForm myForm) {...}
 }
0 голосов
/ 31 мая 2011

Экземпляр формы предположительно создается в program.cs, поэтому вы можете получить доступ к общедоступным / внутренним методам экземпляра оттуда.

Реализация Program.cs по умолчанию более или менее похожа на эту:

static class Program
{
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new MainForm());
    }
}

new MainForm() создает экземпляр вашей формы.Просто назначьте ее локальной переменной, чтобы вызвать ее методы:

        var mainForm = new MainForm();
        mainForm.MethodToCall();
        Application.Run(mainForm);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...