Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] доступ к элементам дочерних форм в MDI (http://forum.oszone.net/showthread.php?t=222096)

SeRgikON 03-12-2011 19:29 1808633

доступ к элементам дочерних форм в MDI
 
есть две формы, одна родительская (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 уже не будет, т.к просто будет "переоткрываться" одна и та же форма...я походу сильно туплю, подскажите как исправить)

Delirium 05-12-2011 01:16 1809395

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

Delirium 05-12-2011 02:03 1809416

Вот мое решение. 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

SeRgikON 05-12-2011 19:37 1809832

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

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

например из вашего цикла:
PHP код:

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

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

Delirium 06-12-2011 04:36 1810061

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


Время: 00:36.

Время: 00:36.
© OSzone.net 2001-