Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Связь между формами 
:(
    Опции темы
svarogik
Дата 8.6.2008, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.3.2006

Репутация: нет
Всего: нет



у меня есть в приложении две формы, хочу чтобы при нажатии кнопки на одной форме на другой в лист боксе чето появлялось, и заодно запускался один из встроенных методов в форме, подскажите как
PM MAIL   Вверх
Raid
Дата 8.6.2008, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 10.6.2007
Где: Москва

Репутация: нет
Всего: нет



Из главной в дочернюю можно передавать так:
В классе дочерней формы пишешь метод заполнения листбокса
В главной форме при нажатии на кнопку вызываешь этот метод через объект второй формы и на сторой формочке всё заполняется
Если нужны параметры из главной формы, то методу их передавай
PM MAIL   Вверх
informatik
Дата 8.6.2008, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 207
Регистрация: 4.11.2007

Репутация: нет
Всего: 6



Я думаю тут должно быть уточнение - в каком порядке эти формы запускаются и запускают ли друг друга?. 

Как я понял эти формы не запускают друг друга, а каждая отдельно, .т.е они функционируют не зная о друг друге?


--------------------
namespace informatik
PM MAIL   Вверх
Raid
Дата 8.6.2008, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 10.6.2007
Где: Москва

Репутация: нет
Всего: нет



Значит третий объект, который знает о существовании обеих форм, подписывается на клик кнопки на первой форме и вызывает описанный метод для второй формы.
PM MAIL   Вверх
svarogik
Дата 8.6.2008, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.3.2006

Репутация: нет
Всего: нет



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

Добавлено через 6 минут и 17 секунд
я еще не совсем понимаю как главная форма создается, ведь я пока описываю только абстрактный класс, к абстрактному обьекту обратится нельзя, а как там она будет называться при инициализации не совсем понимаю
PM MAIL   Вверх
Raid
Дата 8.6.2008, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 10.6.2007
Где: Москва

Репутация: нет
Всего: нет



Смотри, главная форма это form1 Можно типо паттерна Наблюдатель организовать

Код

public interface IObserver //интерфейс
    {
        void HandleClick();
    }
    public partial class Form1 : Form, IObserver
    {
        Form2 frm2;
        Form3 frm3;
        public Form1()
        {
            InitializeComponent();
            frm2 = new Form2((IObserver)this); // второй форме передаешь ссылку на главную и когда по второй кликнут, то можно вызвать метод HandleClick() первой формы
            frm3 = new Form3();
        }
        public void HandleClick()  // раелизация интерфейса
        {
            frm3.FillListBox();
        }
    }


вторая форма это форма, по которой кликают
Код

 public partial class Form2 : Form
    {
        IObserver observer;
        public Form2(IObserver o)
        {
            InitializeComponent();
            observer = o;
        }
        private void button1_Click(object sender, EventArgs e)
        {
            observer.HandleClick();
        }
    }


и в третьей 
Код

    public partial class Form3 : Form
    {
        public Form3()
        {
            InitializeComponent();
        }
        public void FillListBox()
        { 
        // заполняешь массивами как тебе нужно
        }
    }

PM MAIL   Вверх
svarogik
Дата 8.6.2008, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.3.2006

Репутация: нет
Всего: нет



еще уточнение мне надо чтоб по нажатию в дочерней писалось в другой дочерней, а процедурка в главной

Добавлено через 4 минуты и 30 секунд
и кнопок несколько, в зависимости от того какая нажата нужно вызвать разные процедуры, и написать разный текст в листбокс

Добавлено через 4 минуты и 52 секунды
мне для каждой кнопки наблюдателя чтоли делать?
PM MAIL   Вверх
svarogik
Дата 8.6.2008, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.3.2006

Репутация: нет
Всего: нет



Код

public interface IObserver //интерфейс
    {
        void HandleClick();
    }
 
    public partial class Form1 : Form
    {
        public rect rectW;
        public Form3 inform;
        public Form2 coform;

        public List<rect> bl = new List<rect>();
        public List<rect> wh;

        public List<string> ff = new List<string>();
      //public List<string> ff;

        public Form1()
        {
            InitializeComponent();
            SolidBrush brush1 = new SolidBrush(Color.Black);
            inform = new Form3();
           /*( ! )*/ coform = new Form2((IObserver)this);
        }

        public void HandleClick()  // раелизация интерфейса
        {
            inform.FillListBox();
        }


там где пометил ошибка выскакивет, не совсем везжаю что за дела
Unable to cast object of type 'WindowsApplication5.Form1' to type 'WindowsApplication5.IObserver'.
в других формах все сделал как надо
PM MAIL   Вверх
Raid
Дата 8.6.2008, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 10.6.2007
Где: Москва

Репутация: нет
Всего: нет



Извини, я одним глазом футбол смотрю))
Необязательно для каждой кнопки наблюдателя. при клике каждой кнопы вызывай HandleClick , но ему например число передавай, по которому будешь определять какая кнопка нажата. И для каждой кнопки свое число.
интерфейс поменять чуть-чуть
Код

public interface IObserver //интерфейс
    {
        void HandleClick(int buttinID);
    }


Даже наверное проще можно.  Form3 можно объявить как наблюдателя

Код

    public partial class Form3 : Form, IObserver
    {
        public Form3()
        {
            InitializeComponent();
        }
        public void HandleClick(int buttonID)
        { 
Код



        // заполнение
        }
    }

Код

    public partial class Form2 : Form
    {
        IObserver observer;
        public Form2(IObserver o)
        {
            InitializeComponent();
            observer = o;
        }
        private void button1_Click(object sender, EventArgs e)
        {
            observer.HandleClick(1);
        }

А в главной форме сначала объект формы3 инициализируешь и передаешь в конструктор второй
Код

inform= new Form3();
coform= new Form2(frm3);


Обрати внимание в объявлении Form3 ещё и интерфейс IObserver написан. без этого привести объект Form3 к типу IObserver не получится
PM MAIL   Вверх
svarogik
Дата 9.6.2008, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 20.3.2006

Репутация: нет
Всего: нет



ничего не понял в последней строчке. интерфейс описан вне класса ,при написании внутри формы мы просто создаем новый метод, который с нашим обсервером никак не связан, нет вообще конечно все запускается, но как чтото сделать на главной не знаю как
PM MAIL   Вверх
Raid
Дата 9.6.2008, 00:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 10.6.2007
Где: Москва

Репутация: нет
Всего: нет



Цитата

интерфейс описан вне класса ,при написании внутри формы мы просто создаем новый метод, который с нашим обсервером никак не связан

говорю же, надо указать что формочка реализует этот интерфейс Form3: From, IObserver. Это и есть связка.
Цитата

но как чтото сделать на главной не знаю как 

у тебя алгоритм, который определяет что нужно заносить в листбокс в главной форме или в самой дочерней ???
Если что можем в аське продолжить и не шлёпать тут сообщения )) аська в профиле у меня
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0756 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.