none
Как в windows form на C# передать значение из зависимой формы в метку принадлежащую родительской форме RRS feed

  • Вопрос

  • Делаю небольшое приложение. В родительской форме созданы метки label при нажатии на метку (к примеру label12) открывается зависимая форма Form2 в которой с помощью меток создана таблица значений. Нужно чтобы при нажатии на метку (к примеру label17) в форме Form2 значение из этой метки передавалось в метку родительской формы label12.

    Пробывал обработчик события clic для label17 с кодом Owner.label12.Text = label17.Text

    форма Form2 задана как дочерняя от формы Form1

    17 ноября 2010 г. 20:51

Ответы

  • Во 2ой форме:

     public partial class Form2 : Form
     {
      public delegate void MyLabelClickedHandler(string text);
      public event MyLabelClickedHandler MyLabelClicked;
    
      public Form2()
      {
       InitializeComponent();
      }
    
      private void label1_Click(object sender, EventArgs e)
      {
       if (MyLabelClicked != null)
        MyLabelClicked(label1.Text);
      }
     }
    

     

    1ая форма:

     public partial class Form1 : Form
     {
      public Form1()
      {
       InitializeComponent();
      }
    
      void f2_MyLabelClicked(string text)
      {
       label1.Text = text;
      }
    
      private void label2_Click(object sender, EventArgs e)
      {
       Form2 f2 = new Form2();
       f2.MyLabelClicked += new Form2.MyLabelClickedHandler(f2_MyLabelClicked);
    
       f2.Show();
      }
     }
    


    Для связи [mail]
    • Предложено в качестве ответа PashaPash 19 ноября 2010 г. 19:44
    • Помечено в качестве ответа Abolmasov Dmitry 23 ноября 2010 г. 12:05
    19 ноября 2010 г. 17:15
  • Можно почитать про события в книгах:

       * Эндрю Троелсен. С# 2008 и платформа .NET 3.5 Framework

       * Кристиан Нейгел, Билл Ивьен, Джей Глинн, Карли Уотсон, Морган Скиннер. C# 2005 и платформа .NET 3.0 для профессионалов

    Также про события можно посмотреть в библиотеке мсдн - События (Руководство по программированию в C#)

     

    Owner - Для создания формы, принадлежащей другой форме, необходимо назначить ее свойству Owner ссылку на форму, которая станет владельцем. Когда формой владеет другая форма, она сворачивается и закрывается вместе с формой-владельцем. Например, если владельцем Form2 является форма Form1, и если Form1 закрывается или сворачивается, Form2 также закрывается или сворачивается. Собственные формы также никогда не отображаются сзади формы-владельца. Имеется возможность использовать собственные формы для окон (например, окна поиска и замены), которые не должны исчезать при выборе формы-владельца. (Form.Owner - свойство )

    Через Owner нельзя было получить доступ к Label, т.к. он был объявлен как private.

     


    Для связи [mail]
    • Помечено в качестве ответа Abolmasov Dmitry 23 ноября 2010 г. 12:05
    22 ноября 2010 г. 7:01
  • Создаешь в Form2 событие, допустим MyLabelClicked в качестве параметра
    принимающий строковое значение (текст лайбла). В основной форме, при
    создании Form2, создаешь об��аботчик этого события MyLabelClicked. При
    нажатии в Form2 инициируешь событие и передаешь параметром значение из
    Label17...
     
    • Помечено в качестве ответа Abolmasov Dmitry 23 ноября 2010 г. 12:05
    18 ноября 2010 г. 4:48
    Модератор

Все ответы

  • Создаешь в Form2 событие, допустим MyLabelClicked в качестве параметра
    принимающий строковое значение (текст лайбла). В основной форме, при
    создании Form2, создаешь об��аботчик этого события MyLabelClicked. При
    нажатии в Form2 инициируешь событие и передаешь параметром значение из
    Label17...
     
    • Помечено в качестве ответа Abolmasov Dmitry 23 ноября 2010 г. 12:05
    18 ноября 2010 г. 4:48
    Модератор
  • Извините но я только начал изучать C# и как создавать события пока не знаю. Приведите пожалуйста пример
    19 ноября 2010 г. 12:46
  • Во 2ой форме:

     public partial class Form2 : Form
     {
      public delegate void MyLabelClickedHandler(string text);
      public event MyLabelClickedHandler MyLabelClicked;
    
      public Form2()
      {
       InitializeComponent();
      }
    
      private void label1_Click(object sender, EventArgs e)
      {
       if (MyLabelClicked != null)
        MyLabelClicked(label1.Text);
      }
     }
    

     

    1ая форма:

     public partial class Form1 : Form
     {
      public Form1()
      {
       InitializeComponent();
      }
    
      void f2_MyLabelClicked(string text)
      {
       label1.Text = text;
      }
    
      private void label2_Click(object sender, EventArgs e)
      {
       Form2 f2 = new Form2();
       f2.MyLabelClicked += new Form2.MyLabelClickedHandler(f2_MyLabelClicked);
    
       f2.Show();
      }
     }
    


    Для связи [mail]
    • Предложено в качестве ответа PashaPash 19 ноября 2010 г. 19:44
    • Помечено в качестве ответа Abolmasov Dmitry 23 ноября 2010 г. 12:05
    19 ноября 2010 г. 17:15
  • Большое спасибо за ответ.

    Ещё вопрос- в какой книге доходчивым языком разъясняется подобное

    Я пытался через Owner делать но получалось менять только текст заголовка первой формы. Может для подобного Owner не подходит?

    19 ноября 2010 г. 19:00
  • Можно почитать про события в книгах:

       * Эндрю Троелсен. С# 2008 и платформа .NET 3.5 Framework

       * Кристиан Нейгел, Билл Ивьен, Джей Глинн, Карли Уотсон, Морган Скиннер. C# 2005 и платформа .NET 3.0 для профессионалов

    Также про события можно посмотреть в библиотеке мсдн - События (Руководство по программированию в C#)

     

    Owner - Для создания формы, принадлежащей другой форме, необходимо назначить ее свойству Owner ссылку на форму, которая станет владельцем. Когда формой владеет другая форма, она сворачивается и закрывается вместе с формой-владельцем. Например, если владельцем Form2 является форма Form1, и если Form1 закрывается или сворачивается, Form2 также закрывается или сворачивается. Собственные формы также никогда не отображаются сзади формы-владельца. Имеется возможность использовать собственные формы для окон (например, окна поиска и замены), которые не должны исчезать при выборе формы-владельца. (Form.Owner - свойство )

    Через Owner нельзя было получить доступ к Label, т.к. он был объявлен как private.

     


    Для связи [mail]
    • Помечено в качестве ответа Abolmasov Dmitry 23 ноября 2010 г. 12:05
    22 ноября 2010 г. 7:01
  • вставил приведеный вами код всё получилось.

    Попробывал получить текст из метода формы1 в текст лэйбла формы2

    В форме 1 создал метод вычисляющий значение и преобразующий его в текст

    void Relation_RtoS(string text)
          {
          double RdivideS, Rpunch, Weight;
          Weight = Double.Parse( textBox2.Text );
          Rpunch = Double.Parse( textBox1.Text );
          RdivideS = Rpunch / Weight;
          text = "R/S=" + RdivideS;
          }
    

    затем при нажатии в форме1 label12 мне нужно передать этот текст в метку формы2 label2

    Можно создать подобный метод в форме 2 но тогда textBox из формы 1 надо делать public, а это, как я понимаю, не верно.

    23 ноября 2010 г. 19:52