Как получить доступ к объектам формы из другого файла CS в C # - PullRequest
7 голосов
/ 04 апреля 2009

В файле form.cs у меня есть две кнопки, памятка и таймер. Мой вопрос: как получить доступ к таймеру или заметке из другого файла cs?

Я пытался обнародовать объекты, но это не сработало, пожалуйста, дайте мне источник или проект, чтобы я мог видеть, где я ошибаюсь.

Спасибо!

Ответы [ 5 ]

15 голосов
/ 04 апреля 2009

Выберите вашу кнопку в конструкторе, перейдите к ее свойствам и измените свойство «Модификаторы» с Private на Public.

Тогда вы можете получить доступ к нему из другого класса, примерно так:

public static class Test
{
    public static void DisalbeMyButton()
    {
        var form = Form.ActiveForm as Form1;

        if (form != null)
        {
            form.MyButton.Enabled = false;
        }
    }
}

Примечание: это всего лишь пример и определенно не образец хорошего дизайна :-)

6 голосов
/ 14 марта 2013

Объект Program уже создан в Program.cs, но на него нет ссылок. С простым редактированием вы можете включить

Application.Run(new Form1());

до

Application.Run(formInstance = new Form1());

объявить как

public static Form1 formInstance;

и используйте

Program.formInstance.MyFunction(params);
6 голосов
/ 04 апреля 2009

Я волнуюсь, когда слышу, как кто-то говорит о «другом файле .cs» или «другом файле .vb». Это часто (хотя и не всегда) указывает на отсутствие понимания программирования, по крайней мере, ОО-программирования. Что такое в файлах? Один урок? Два?

Вы не пытаетесь получить доступ к этим вещам из другого файла , вы пытаетесь получить к ним доступ из метода класса или, возможно, из модуля в VB.

Ответ на ваш вопрос будет зависеть от характера класса и метода, из которого вы пытаетесь получить доступ к этим вещам, и от причины, по которой вы хотите получить к ним доступ.

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

1 голос
/ 04 апреля 2009

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

Например, вот как вы это сделаете:

Form1 myForm = new Form1;
string theButtonTextIAmLookingFor = myForm.MyButton.Text;

Я предполагаю, что вы можете пытаться получить к нему доступ, как будто он статический, например:

string theButtonTextIAmLookingFor = Form1.MyButton.Text;

Просто то, что вы можете проверить.

0 голосов
/ 15 ноября 2011

Интуитивно понятный вариант - просто сделать поле управления общедоступным. Вот очень хорошее решение для решения этой проблемы ..

http://searchwindevelopment.techtarget.com/answer/In-C-how-can-I-change-the-properties-of-controls-on-another-form

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...