Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.01.2010, 20:27   #1
cherw9!40k
Пользователь
 
Аватар для cherw9!40k
 
Регистрация: 20.11.2009
Сообщений: 61
Вопрос (C#) MS Visual Studio 2008. Как работать с объектами разных окон?

При запуске программы появляющееся окно вызывает другое окно. Во втором окне вызывается метод, который работает с объектом первого окна. Как это сделать? Вот, что пытался изобразить я:

(основное окно, которое вызывает второе окно)

Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Data.SqlClient;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
        
    public partial class ОсновноеОкно : Form
    {
        public ОсновноеОкно()
        {
            InitializeComponent();
            ОкноИдентификации ОИ = new ОкноИдентификации();
            ОИ.ShowDialog();
            
        }
        
    }
}
(второе окно)

Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class ОкноИдентификации : Form
    {
        public ОкноИдентификации()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ОсновноеОкно ОО = new ОсновноеОкно();
            ОО.Text = "Пол";
        }
    }
}
Все нормально компилируется, только никаких эффектов не замечено.
cherw9!40k вне форума Ответить с цитированием
Старый 16.01.2010, 23:50   #2
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

А что именно хотите сделать? Глобальные переменые во многих частях решают проблему...
dampirik вне форума Ответить с цитированием
Старый 17.01.2010, 00:08   #3
cherw9!40k
Пользователь
 
Аватар для cherw9!40k
 
Регистрация: 20.11.2009
Сообщений: 61
По умолчанию

Из окна ОкноИдентификации хочу изменить надпись в окне ОсновноеОкно.

Код:
ОсновноеОкно ОО = new ОсновноеОкно();
            ОО.Text = "Пол";
Если сделать

Код:
ОсновноеОкно ОО = new ОсновноеОкно();
            ОО.Text = "Пол";
            ОО.ShowDialog();
то появится окно с надписью "Пол". При этом будет еще одно такое же окно с надписью Form1 (то есть два объекта одного класса)
cherw9!40k вне форума Ответить с цитированием
Старый 17.01.2010, 00:38   #4
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

Компьютера жалко под рукой нету с визуалом))
а если создать глобальную переменную типа стринг Text
в галвной форме у тебя будет
ОО.Text = Text;
а в дочерней
изменить этот Text

Плюс можно задать дочерней форме свойства и обьявленные переменные главной формы те сделать дочернию главной форой и тогда ты можешь обращаться из дочерней формы к главной...)
dampirik вне форума Ответить с цитированием
Старый 17.01.2010, 01:23   #5
cherw9!40k
Пользователь
 
Аватар для cherw9!40k
 
Регистрация: 20.11.2009
Сообщений: 61
По умолчанию

Цитата:
Сообщение от dampirik Посмотреть сообщение
в галвной форме у тебя будет
ОО.Text = Text;
а в дочерней
изменить этот Text
Код:
namespace WindowsFormsApplication1
{
    public partial class ОкноИдентификации : Form
    {
        public ОкноИдентификации()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ОсновноеОкно ОО = new ОсновноеОкно();
            Глобал.НадписьОкна = "Пол";
        }
    }
}
Код:
namespace WindowsFormsApplication1
{
    static class Глобал
    {
        public static String НадписьОкна;
    }
    public partial class ОсновноеОкно : Form
    {
        public ОсновноеОкно()
        {
            InitializeComponent();
            ОкноИдентификации ОИ = new ОкноИдентификации();
            ОИ.ShowDialog();
        }       
    }
}

Глобальную переменную создал, в дочерней форме изменил. Куда сувать (а главное как) ОО.Text?
cherw9!40k вне форума Ответить с цитированием
Старый 17.01.2010, 02:37   #6
Aexx
Программист тьмы
Форумчанин
 
Аватар для Aexx
 
Регистрация: 02.09.2009
Сообщений: 227
По умолчанию

Если вам надо получить доступ из дочерней формы к переменным главной, можете сделать так:
Главная форма:
Код:
Form2 subForm = new Form2();
subForm.Owner = this;
subForm.ShowDialog();
Дочерняя форма:
Код:
Form1 mainForm = (Form1)this.Owner;
Т.е. вы создаете новый объект формы 2 (дочерней), и делаете главную форму ее хозяином. Теперь вы можете получить доступ к любым глобальным переменным (и методам) главной формы через mainForm.Имя_переменной. Как то так
Aexx вне форума Ответить с цитированием
Старый 17.01.2010, 02:44   #7
cherw9!40k
Пользователь
 
Аватар для cherw9!40k
 
Регистрация: 20.11.2009
Сообщений: 61
По умолчанию

Получилось! Пасиба!

Пы.Сы. Что такое Овнер?
cherw9!40k вне форума Ответить с цитированием
Старый 17.01.2010, 02:49   #8
Aexx
Программист тьмы
Форумчанин
 
Аватар для Aexx
 
Регистрация: 02.09.2009
Сообщений: 227
По умолчанию

Это свойство, задающее владельца элемента (Form) и дающее доступ к свойствам и методам этого самого владельца.
Цитата:
Получилось! Пасиба!
Сам не так давно полдня бился над похожей задачей :-) Не за что)
Aexx вне форума Ответить с цитированием
Старый 22.01.2010, 15:41   #9
Cpluser
Форумчанин
 
Аватар для Cpluser
 
Регистрация: 16.02.2009
Сообщений: 555
По умолчанию

Есть Form1 и Form2 как зделать так чтоб то что мы ввели в textBox1 на Form2 передалось в Form1.
А вот так у меня чтото не получаетса
Главная форма:
Код:

Form2 subForm = new Form2();
subForm.Owner = this;
subForm.ShowDialog();

Дочерняя форма:
Код:

Form1 mainForm = (Form1)this.Owner;


Помогите пожалутса!!
Cpluser вне форума Ответить с цитированием
Старый 22.01.2010, 18:26   #10
Hollander
Участник клуба
 
Аватар для Hollander
 
Регистрация: 03.05.2007
Сообщений: 1,189
По умолчанию

Цитата:
Сообщение от Cpluser Посмотреть сообщение
Есть Form1 и Form2 как зделать так чтоб то что мы ввели в textBox1 на Form2 передалось в Form1.
А вот так у меня чтото не получаетса
Главная форма:
Код:

Form2 subForm = new Form2();
subForm.Owner = this;
subForm.ShowDialog();

Дочерняя форма:
Код:

Form1 mainForm = (Form1)this.Owner;


Помогите пожалутса!!
Ну как бы все гуд. Теперь только поставь обработчик на ввод в textBox1 и передавай в mainForm.
Только: я так понял, что ты
Код:
Form1 mainForm = (Form1)this.Owner;
делаешь в конструкторе. А надо объявить в классе(т.е. в форме) поле
Код:
Form1 mainForm = null;
А в конструкторе:
Код:
mainForm = (Form1)this.Owner;
тогда будешь иметь доступ к mainForm из Form2.
И получится:
Код:
void Обработчик_ввода_textBox1(параметры)
{
mainForm.Какой-то_public_метод(textBox1.Text);
}
Hollander вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
MS SQL Server 2008 и Visual Studio 2008 C# (Как работать с БД?) cherw9!40k Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 2 14.01.2010 20:51
Проблема с windows visual styles в Visual studio 2008 express. [awa Visual C++ 2 09.01.2010 06:05
Visual Studio Standard 2008 против Visual Studio Express 2008. Стоит ли покупать? Casper-SC Софт 4 31.12.2009 11:46
VISUAL STUDIO 2008 defaul language - как переключить в VISUAL STUDIO 2008 язык программирования, использ Эйнж Общие вопросы C/C++ 0 27.12.2009 20:39
Как включить pdh.lib в Visual Studio 2008? PMike Помощь студентам 2 16.04.2009 15:44