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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как обратиться к объекту другой формы, Так и не понял 
:(
    Опции темы
shurokan
Дата 8.6.2009, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Прочитав тему "Как обратиться к объекту другой формы" я так и не понял как обратится в моем, ваще тривиальном примере. Если кому несложно, то помогите.

Есть форма Form1. На ней две кнопки. По нажатию каждой из них, логический флаг сбрасывается. 
Код
private void button1_Click(object sender, EventArgs e)
        {
            bool flag=true;
            Form2 form2 = new Form2();
            form2.Show();    
        }


и...
Код
private void button1_Click(object sender, EventArgs e)
        {
            bool flag=false;
            Form2 form2 = new Form2();
            form2.Show();    
        }


Как мне после этого вывести:
Код
private void Form2_Load(object sender, EventArgs e)
        {
            textBox1.Text="Нажата кнопка: " + flag.ToString() + "!";
        }


?

Модератор: Название темы должно отражать ее суть!

Это сообщение отредактировал(а) Partizan - 9.6.2009, 17:01
PM MAIL   Вверх
Экскалупатор
  Дата 8.6.2009, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

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



можно через конструктор формы2 сделать, так будет проще всего
PM MAIL ICQ   Вверх
shurokan
Дата 8.6.2009, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

Фома 1:
Код
namespace FLAG
{
    public partial class Form1 : Form
    {
        bool flag;

        public bool Flag
        {
            get { return flag; }
            set { flag = value; }
        }

        public Form1()
        {
            InitializeComponent();           
        }       
      
        private void button1_Click(object sender, EventArgs e)
        {
            flag = true;
            Form2 form2 = new Form2();
            form2.ShowDialog(this);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            flag = false;
            Form2 form2 = new Form2();
            form2.ShowDialog(this);
        }       
    }
}


Форма:
Код
FLAG
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        public void Form2_Load(object sender, EventArgs e)
        {
            bool flag2 = (Owner as Form1).Flag;
            textBox1.Text ="Нажата кнопка: " + flag2.ToString()+ "!";
        }
    }
}

Может еще будут варианты, а то чето у меня больше не получается.


...но такой способ не канает с MDI окнами :(

Это сообщение отредактировал(а) shurokan - 8.6.2009, 21:42
PM MAIL   Вверх
SKrivosein
Дата 9.6.2009, 01:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Идущий в даль
**


Профиль
Группа: Участник
Сообщений: 271
Регистрация: 9.6.2007
Где: Praha - Прага

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



Может ты спешил, но твой код не работает
1. Form2_Load событие поэтому
Код

public Form2()
        {
            InitializeComponent();

            Load += new EventHandler(Form2_Load); \\ждем его
        }

2.  Логическую переменнуе переводиш в string    
Код

  bool flag2 = (Owner as Form1).Flag;
   textBox1.Text ="Нажата кнопка: " + flag2.ToString()+ "!"; \\?

Ну да ладно, это мелочи.


--------------------
Оптимист - это плохо информированный человек.
user posted image

PM MAIL   Вверх
SKrivosein
Дата 9.6.2009, 01:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Идущий в даль
**


Профиль
Группа: Участник
Сообщений: 271
Регистрация: 9.6.2007
Где: Praha - Прага

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



А вот решение наоборот, интересней
user posted image
В первой форме открываем кнопкой вторую форму, там чего то пишем в текст-бокс.
Закрываем вторую форму и возвращаем значение в первую форму, выписываем его в текст-бокс первой формы.
----------------------------
Я бы то делал так:
Код

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            CallBack.callbackEventHandler = new CallBack.callbackEvent(this.getCallBackText);
        }
        private void getCallBackText(string textReturnedFromDialog)
        {
           textBox1.Text = textReturnedFromDialog;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 form2 = new Form2();
            form2.ShowDialog();
        }
    }
......

public static class CallBack
    {
        public delegate void callbackEvent(string textFromTextBox);
        public static callbackEvent callbackEventHandler;
    }
.......

public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            string text2 = textBox2.Text;
            CallBack.callbackEventHandler(text2);
            this.Close();
        }
    }




Это сообщение отредактировал(а) SKrivosein - 9.6.2009, 02:10


--------------------
Оптимист - это плохо информированный человек.
user posted image

PM MAIL   Вверх
KelTron
Дата 9.6.2009, 04:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

namespace FLAG
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();           
        }       
      
        private void button1_Click(object sender, EventArgs e)
        {
            Form2 form2 = new Form2(true);
            form2.ShowDialog();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Form2 form2 = new Form2(false);
            form2.ShowDialog();
        }       
    }
}


Код

FLAG
{
    public partial class Form2 : Form
    {
        private bool flag;
        public Form2(bool flag)
        {
            InitializeComponent();
            this.flag = flag;
        }

        public void Form2_Load(object sender, EventArgs e)
        {
            textBox1.Text ="Нажата кнопка: " + this.flag.ToString()+ "!";
        }
    }
}


Это сообщение отредактировал(а) KelTron - 9.6.2009, 04:48


--------------------
Тысячами незримых нитей обвивает тебя Закон. Разрубишь одну - преступник. Десять - смертник. Все - Бог.
Эвенгар Салладорский, основатель Школы Тьмы.
PM MAIL   Вверх
shurokan
Дата 9.6.2009, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(SKrivosein @ 8.6.2009,  23:23)
Может ты спешил, но твой код не работает
1. Form2_Load событие поэтому
Код

public Form2()
        {
            InitializeComponent();

            Load += new EventHandler(Form2_Load); \\ждем его
        }

2.  Логическую переменнуе переводиш в string    
Код

  bool flag2 = (Owner as Form1).Flag;
   textBox1.Text ="Нажата кнопка: " + flag2.ToString()+ "!"; \\?

Ну да ладно, это мелочи.

странно, но у меня работает мой код. smile 

Спасибо, KelTron самый простой и удобный способ передачи переменных который я встречал!

Это сообщение отредактировал(а) shurokan - 9.6.2009, 14:10
PM MAIL   Вверх
SKrivosein
Дата 9.6.2009, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Идущий в даль
**


Профиль
Группа: Участник
Сообщений: 271
Регистрация: 9.6.2007
Где: Praha - Прага

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



shurokan переписую твой код с второго поста в проект VS 2008 
И пускаю в дебагру , вот этот код
Код

public void Form2_Load(object sender, EventArgs e)
        {
            bool flag2 = (Owner as Form1).Flag;
            textBox1.Text = "Нажата кнопка: " + flag2.ToString() + "!";
        }

вобще непроисходит.... Если добавлю "Load += new EventHandler(Form2_Load);"
то в техт-бокс выпишет "Нажата кнопка: True" ну или False.
Так же  smile 

PS:
Цитата

Спасибо, KelTron самый простой и удобный способ передачи переменных который я встречал!

 Экскалупатор об этом писал.

Это сообщение отредактировал(а) SKrivosein - 9.6.2009, 14:20


--------------------
Оптимист - это плохо информированный человек.
user posted image

PM MAIL   Вверх
shurokan
Дата 9.6.2009, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



SKrivosein
я так думаю вы просто скопировали листинг, но обработчик load не добавили свойства.
Только-что проверял, создал все с нуля, - работает (VS 2005).

Пробывал создать ваш интересный вариант, у меня не вылетает на 
Код
CallBack.callbackEventHandler(text2);


В чем могу собственно грабли?
PM MAIL   Вверх
SKrivosein
Дата 9.6.2009, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Идущий в даль
**


Профиль
Группа: Участник
Сообщений: 271
Регистрация: 9.6.2007
Где: Praha - Прага

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



Признаю свою тупость, я незнаю чего это решил добавить Load руками ? smile 
Мой код у меня работает.


--------------------
Оптимист - это плохо информированный человек.
user posted image

PM MAIL   Вверх
shurokan
Дата 9.6.2009, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(SKrivosein @ 9.6.2009,  15:49)
Признаю свою тупость, я незнаю чего это решил добавить Load руками ? smile 
Мой код у меня работает.

полный листинг можна посмотреть?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

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


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

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


 




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


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

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