none
Взаимодействие форм проекта RRS feed

  • Вопрос

  • Проект состоит из двух форм, каждая форма содержит по  одной кнопке.
    Первая форма запускается автоматически.
    Вторая форма создается и запускается кнопкой на первой форме.
    Код первой формы:

    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 vcs015
    {
        public partial class Form1 : Form
        {
            public static bool f2yes = false;
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                if (!f2yes)
                {
                    Form2 f2 = new Form2();
                    f2.Show();
                    f2yes = true;
                }
            }
            public void hello()
            {
                this.Text = "Привет";
            }
        }
    }
    Код второй формы:
    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 vcs015
    {
        public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }
    
            private void Form2_FormClosed(object sender, FormClosedEventArgs e)
            {
                Form1.f2yes = false;
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                //Form1.Text = "Привет"; как выполнить это действие?
                //Form1.hello(); как запустить этот метод?
            }
        }
    }
    Что нужно дописать или изменить, чтобы из второй формы были доступны свойства и методы первой формы?
    • Перемещено Siddharth Chavan 1 октября 2010 г. 21:42 MSDN Forums Consolidation (От:Visual C#)
    14 марта 2010 г. 9:27

Ответы

  • 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 vcs015
    {
        public partial class Form1 : Form
        {
            public static bool f2yes = false;
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                if (!f2yes)
                {
                    Form2 f2 = new Form2(this);
                    f2.Show();
                    f2yes = true;
                }
            }
            public void hello()
            {
                this.Text = "Привет";
            }
        }
    }


    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 vcs015
    {
        public partial class Form2 : Form
        {
    	Form1 Form1 { get; set; }	

            public Form2(Form1 form1)
            {
                InitializeComponent();
    	    Form1 = form1;
            }
    
            private void Form2_FormClosed(object sender, FormClosedEventArgs e)
            {
                Form1.f2yes = false;
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
    		Form1.text = "Привет";
                    Form1.hello();
    	}    
    }
    • Помечено в качестве ответа hellokol 14 марта 2010 г. 11:29
    • Снята пометка об ответе hellokol 14 марта 2010 г. 12:42
    • Помечено в качестве ответа I.Vorontsov 15 марта 2010 г. 7:54
    14 марта 2010 г. 10:36

Все ответы

  • 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 vcs015
    {
        public partial class Form1 : Form
        {
            public static bool f2yes = false;
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                if (!f2yes)
                {
                    Form2 f2 = new Form2(this);
                    f2.Show();
                    f2yes = true;
                }
            }
            public void hello()
            {
                this.Text = "Привет";
            }
        }
    }


    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 vcs015
    {
        public partial class Form2 : Form
        {
    	Form1 Form1 { get; set; }	

            public Form2(Form1 form1)
            {
                InitializeComponent();
    	    Form1 = form1;
            }
    
            private void Form2_FormClosed(object sender, FormClosedEventArgs e)
            {
                Form1.f2yes = false;
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
    		Form1.text = "Привет";
                    Form1.hello();
    	}    
    }
    • Помечено в качестве ответа hellokol 14 марта 2010 г. 11:29
    • Снята пометка об ответе hellokol 14 марта 2010 г. 12:42
    • Помечено в качестве ответа I.Vorontsov 15 марта 2010 г. 7:54
    14 марта 2010 г. 10:36
  • Большое спасибо!!! Все работает.
    Я бы никогда не догадался.

    PS: На VB таких проблем вообще нет.
    Да C# для крутых, а для тупых как я - VB.

    Еще вопрос можно?
    Как после этих изменений из первой формы добраться до свойств и методов второй формы ("и туда и суда")?

    Ha VB это выглядит так:

    'Первая форма
    Public Class Form1
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Form2.Show()
        End Sub
        Public Sub hello()
            Me.Text = "Привет"
        End Sub
    
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Form2.Text = "Привет"
            Form2.hello()
        End Sub
    End Class
    

    'Вторая форма
    Public Class Form2
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Form1.Text = "Привет"
            Form1.hello()
        End Sub
        Public Sub hello()
            Me.Text = "Привет"
        End Sub
    End Class
    • Разделено I.Vorontsov 15 марта 2010 г. 7:51
    • Объединено I.Vorontsov 15 марта 2010 г. 7:53 Тест
    14 марта 2010 г. 12:54
  • вы можете передать в конструктор ссылку на форму и записать ее в поле другой формы.
    методы формы должны быть с модификатором internal или public, чтобы другая форма могла ими воспользоваться.

    14 марта 2010 г. 12:55