Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - [решено] доступ к элементам дочерних форм в MDI

Ответить
Настройки темы
.NET - [решено] доступ к элементам дочерних форм в MDI

Аватара для SeRgikON

Новый участник


Сообщения: 34
Благодарности: 1

Профиль | Отправить PM | Цитировать


Изменения
Автор: SeRgikON
Дата: 04-12-2011
есть две формы, одна родительская (MainForm), другая дочерняя (ChildForm) с элементом PictureBox (по ней создаются другие дочерние формы), как получить доступ к PictureBox'у активной дочерней формы (т.е допустим загрузить в него картинку)
например:

PHP код: Выделить весь код

public class MainFormForm
    
{
        
        
private void создание_нового_окна(object senderEventArgs e)
        {
         if (
ofd.ShowDialog() == DialogResult.OK)  //где ofd - OpenFileDialog
            
{
            
ChildForm cf = new ChildForm ();
            
cf.MdiParent this;
            
cf.PictureBox.Image Image.FromFile(ofd.FileName); 
            
cf.Show();
              }
        }
      } 

так будет создаваться новое окно с выбранной картинкой, но как потом перезаписать эту картинку (допустим применив к ней какой-нибудь фильтр).
если вынести создание объекта класса дочерней формы (ChildForm cf = new ChildForm ()) из метода и объявить его в классе, то к PictureBox'у можно будет обратиться и перезаписать картинку, но соответственно MDI уже не будет, т.к просто будет "переоткрываться" одна и та же форма...я походу сильно туплю, подскажите как исправить)

Отправлено: 19:29, 03-12-2011

 

Аватара для Delirium

Ветеран


Сообщения: 5624
Благодарности: 936

Профиль | Отправить PM | Цитировать


Как вариант - перебирать циклом Foreach коллекцию всех дочерних окон MDI приложения и в нужной форме производить изменения.

-------

Пройденные курсы:
[Microsoft №10174 Sharepoint], [SharePoint]
Мои проекты:[CheckAdmins], [NetSend7], [System Uptime], [Remote RAdmin LogViewer],[Netdom GDI], [Holidays - напоминалка о днях рождения]

А я офис-гуру :)


Отправлено: 01:16, 05-12-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для Delirium

Ветеран


Сообщения: 5624
Благодарности: 936

Профиль | Отправить PM | Цитировать


Вот мое решение. Mdi форма, одна кнопка открывает одну форму, другая - другую. В первой форме только PictureBox (метод доступа к объекту - Public), на второй кнопка, по ее нажатию в первой форме меняется картинка на другую.
Код кнопки из второй формы:
Код: Выделить весь код
 private void button1_Click(object sender, EventArgs e)
        {
            foreach (Form chform in this.MdiParent.MdiChildren) //пробегаемся по дочерним окнам основного окна
            {
                if (chform.Name == "ChildForm") //если нашли нужную нам форму, то 
                {
                    ((PictureBox)chform.Controls["PictureBox1"]).Image = Image.FromFile(@"D:\picture2.png");
                     //Находим наш контрол на первой форме и меняем картинку.
                }
            }
        }
А вообще есть неплохие мануалы. Почитай вот это:
http://www.codeproject.com/KB/cs/mdiformstutorial.aspx
http://stackoverflow.com/questions/7...m-another-form

-------

Пройденные курсы:
[Microsoft №10174 Sharepoint], [SharePoint]
Мои проекты:[CheckAdmins], [NetSend7], [System Uptime], [Remote RAdmin LogViewer],[Netdom GDI], [Holidays - напоминалка о днях рождения]

А я офис-гуру :)

Это сообщение посчитали полезным следующие участники:

Отправлено: 02:03, 05-12-2011 | #3


Аватара для SeRgikON

Новый участник


Сообщения: 34
Благодарности: 1

Профиль | Отправить PM | Цитировать


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

((Название_класса_контрола)ActiveMdiChild.Controls["Имя_контрола_на_форме"]) 


например из вашего цикла:
PHP код: Выделить весь код

((PictureBox)ActiveMdiChild.Controls["PictureBox1"]).Image Image.FromFile(@"D:\picture2.png"); 


в результате выполнения в PictureBox1, расположенный на активной дочерней форме загрузится изображение picture2. Аналогично можно работать с другими контролами и их методами.

Последний раз редактировалось SeRgikON, 05-12-2011 в 19:42.


Отправлено: 19:37, 05-12-2011 | #4


Аватара для Delirium

Ветеран


Сообщения: 5624
Благодарности: 936

Профиль | Отправить PM | Цитировать


SeRgikON, вот видишь как чудесно, и проблему решил и мне подсказал более простой вариант

-------

Пройденные курсы:
[Microsoft №10174 Sharepoint], [SharePoint]
Мои проекты:[CheckAdmins], [NetSend7], [System Uptime], [Remote RAdmin LogViewer],[Netdom GDI], [Holidays - напоминалка о днях рождения]

А я офис-гуру :)


Отправлено: 04:36, 06-12-2011 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - [решено] доступ к элементам дочерних форм в MDI

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Delphi - Панель открытых дочерних форм на главной форме в MDI приложениях. Kapuha Программирование и базы данных 3 23-06-2011 12:53
Конкурс - Быстрый доступ к часто используемым элементам панели управления Windows 7 OSZone Microsoft Windows 7 2 02-10-2009 14:47
CSS доступ к элементам Dr.Dark Вебмастеру 7 29-08-2009 00:04
.NET - [решено] Переключение между MDI окнами и выбор открытого окна в приложении (C#) Delirium Программирование и базы данных 1 15-12-2008 08:52
Проблема сдоступом к элементам фрейма Guest Вебмастеру 4 19-11-2005 00:13




 
Переход