Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Обращение из одного окна к другому

1.8K
20 декабря 2007 года
rSolanov
106 / / 04.05.2005
Здравствуйте! Есть два окна, одно из которых является главным и создаётся кодом:
 
Код:
Application.Run(new F_Main());

Из окна класса F_Main я могу обратиться к другому окну, инкапсулировав в классе F_Main поле
 
Код:
TMyForm MyForm;

И при создании окна класса TMyForm я пишу:
 
Код:
MyForm = new TMyForm();

А как мне из окна класса TMyForm обратиться к окну класса F_Main?
370
20 декабря 2007 года
koval
443 / / 29.08.2005
Цитата: rSolanov
Здравствуйте! Есть два окна, одно из которых является главным и создаётся кодом:
 
Код:
Application.Run(new F_Main());

Из окна класса F_Main я могу обратиться к другому окну, инкапсулировав в классе F_Main поле
 
Код:
TMyForm MyForm;

И при создании окна класса TMyForm я пишу:
 
Код:
MyForm = new TMyForm();

А как мне из окна класса TMyForm обратиться к окну класса F_Main?



Можно конкретнее, а то не совсем понятная, идея. Что значит "обратится к окну класса". Может вы имеете ввиду, вызвать метод класса, то в данном случае можно использовать делегаты. Если оно так и есть, то думаю, что программа плохо спроектирована.

1.8K
20 декабря 2007 года
rSolanov
106 / / 04.05.2005
Программа-это только созданный проект с двумя окнами. весь существующий код создан самой Visual Studio. В Builder C++ все указатели на окна создаются автоматически и они глобальные. Поэтому я из любого окна могу вызвать метод, свойство другого окна. А тут ситуация совсем другая. Указатели глобально объявлять нельзя и как тогда вызвать какой-нибудь метод главного окна из любого другого если указателя на главное окно просто нет?
370
20 декабря 2007 года
koval
443 / / 29.08.2005
Цитата: rSolanov
Программа-это только созданный проект с двумя окнами. весь существующий код создан самой Visual Studio. В Builder C++ все указатели на окна создаются автоматически и они глобальные. Поэтому я из любого окна могу вызвать метод, свойство другого окна. А тут ситуация совсем другая. Указатели глобально объявлять нельзя и как тогда вызвать какой-нибудь метод главного окна из любого другого если указателя на главное окно просто нет?



В таком случае, просто создай указатель(раз его его нет). Используй делегаты, вот собственно и все. А вообще, если вторая форма не воздействует на первую, нужно просто создать отдельный класс, который и будешь использовать обеими формами.

1.8K
20 декабря 2007 года
rSolanov
106 / / 04.05.2005
Неужели обязатетельно создавать новый класс? Почему нельзя как-нибудь глобально объявить указатели на классы и через них обращаться к методам различных окон, ведь это же проще? Тем более что окно класса MainForm создаётся таким образом:
 
Код:
Application.Run(new F_Main());

Пожалуйста, если несложно напишите простенький пример, как из окна класса MyForm я могу изменить цвет окна класса MainForm
370
20 декабря 2007 года
koval
443 / / 29.08.2005
Цитата: rSolanov
Неужели обязатетельно создавать новый класс? Почему нельзя как-нибудь глобально объявить указатели на классы и через них обращаться к методам различных окон, ведь это же проще? Тем более что окно класса MainForm создаётся таким образом:
 
Код:
Application.Run(new F_Main());

Пожалуйста, если несложно напишите простенький пример, как из окна класса MyForm я могу изменить цвет окна класса MainForm



С точки зрения архитектуры языка С# и платформы .NET, было бы правильнее cоздать отдельный класс и использовать его обеими формами, а на мой взгляд еще и проще в плане разбора кода. Но вы хотите создать глобальный указатель,в С# нет глобальных указателей, используй unsafe код, где возможно использование указателей, но это самый худший вариант из всех. А почему вас не устраивает использование делегатов? И еще один вопрос, методы к которым вы хотите обращатся, являются методами на уровне класса или объекта?

1.8K
20 декабря 2007 года
rSolanov
106 / / 04.05.2005
Дело в том, что я программирую на Builder C++ 6.0 а в платформе .Net я пока новичок. Насколько я знаю, в билдере никаких делегатов нет. Там есть указатели на функции. Я так понимаю что делегат-это что-то вроде указателя на функцию? Вы сможете написать пример объявления и и спользования делегата? А методы, к которым я хочу обращаться из одного окна, являются методами другого окна, т.е. другого объекта.
370
20 декабря 2007 года
koval
443 / / 29.08.2005
Все верно делегат это указатель на функции. Читать про делегаты тут
1.8K
20 декабря 2007 года
rSolanov
106 / / 04.05.2005
Да, спасибо Вам за вашу помощь, буду разбираться!
1.8K
20 декабря 2007 года
rSolanov
106 / / 04.05.2005
Добраться до нужного окна с помощью:
 
Код:
Application.OpenForms["Название окна"]
1.9K
22 декабря 2007 года
tva94
115 / / 01.05.2007
А с моей токи зрения луьше в класс Program вписать:
public static delegate void MSW(string m);
public static event MSW Mess;

В окна формы вписать обработчик нашего собития,
А в другую - вызов:
Program.Mess("Message");
35K
27 декабря 2007 года
Boglen
2 / / 27.12.2007
Любите вы сиськомятием позиниматься))

Если нужно вызвать какой-то конкретный встроенный публичный метод родительской формы то:

Инкапсуляция в родительской форме.

Form^ ChildForm;

public ref class ChildForm : public Form
{
private: Form^ parentForm;
public: ChildForm(Form^ parent)
{
InitializeComponents();

this->parentForm = parent;
}
}

Если нужно вызвать какой-то самописный метод, то либо в дочерней форме принимаем в качестве параметра Form1 (по дефолту создается в CLR App.), либо мутим на стороне интерфейс, наследуем его родительской форме, передаем в качестве параметра Object^ дочерней форме this, а далее уже инкапсулируем нужный интерфейс в дочерней форме.
Как говорится
Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.
(c) MSDN :D
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог