Вызов элемента управления из form1 в form2 - PullRequest
0 голосов
/ 10 ноября 2011

У меня есть классы, один - Form1.cs, а другой - Form2.cs

в form1.cs У меня есть tabControl1, и я хочу добавить вкладку в tabcontrol1 (form1), когда я нажимаю накнопка в FORM2.cs

это возможно

Ответы [ 4 ]

0 голосов
/ 03 мая 2013

Когда я покидаю Form2, я пишу текстовый файл, содержащий все, что угодно.(Проверяется только тот факт, что существует. Ничего не читается, но я полагаю, что его содержимое можно использовать для обновления текстового поля в Form1.) Это возвращает Form1 на экран.У меня есть таймер в Form1, используя 5-секундный интервал.Таймер проверяет наличие файла, записанного в Form2.Если он существует, он удаляется, и код, который следует за удалением (файла), обновляет форму Form1, используя любые необходимые процедуры.

0 голосов
/ 10 ноября 2011

Используйте События и Делегаты, я имею в виду выставление некоторых событий в Form2, и когда Form1 вызывает Form2, подключайте Form1 к выставленным событиям Form2.Когда вы щелкаете какую-либо вещь в Form2, вызываете эти события.Обработчик событий в Form1 вызывается / выполняется, а затем вы можете обновить там компоненты вашего пользовательского интерфейса.

Ниже приведен код подсказки:

 class MyClass
{
    public delegate void CustomDelegate();
    public event CustomDelegate CustomEvent;

    public void RaiseAnEvent()
    {
        CustomEvent();
    }
}

sealed class Program 
{


    static void Main()
    {

        MyClass ms = new MyClass();

        ms.CustomEvent += new MyClass.CustomDelegate(ms_CustomEvent);
        ms.RaiseAnEvent();


        Console.ReadLine();
    }

    static void ms_CustomEvent()
    {
        Console.WriteLine("Event invoked");
    }
}
0 голосов
/ 10 ноября 2011

Пример подключения событий:

Файл: Form2.cs

using System;
using System.Windows.Forms;

namespace SO_Suffix
{
    public partial class Form2 : Form
    {
        //<  The delegate needs to be defined as public in the form that 
        //<  is raising the event...
        public delegate void ButtonClickedOnForm2 (object sender, EventArgs e); 

        public Form2()
        {
            InitializeComponent();
            this.button1.Click += new System.EventHandler(this.Button1_Click);
        }

            //<  Capture the click event from the button on Form2, and raise an event
        void Button1_Click(object sender, EventArgs e)
        {
            ButtonClicked(this, e);
        }

        public event ButtonClickedOnForm2 ButtonClicked;
    }
}

Form1.cs: теперь просто подписывается на событие

using System;
using System.Windows.Forms;

namespace SO_Suffix
{
    public partial class Form1 : Form
    {
        Form2 form2 = new Form2();

        public Form1()
        {
            InitializeComponent();
             //<  subscribe to the custom event from form2 and set which function to delegate it to ( form2_ButtonClicked )         
            form2.ButtonClicked += new Form2.ButtonClickedOnForm2(form2_ButtonClicked);
            form2.Show();
        }

        private void form2_ButtonClicked(object sender, EventArgs e)
        {
            this.Controls.Add(new Button());
        }
    }
}
0 голосов
/ 10 ноября 2011

Выставить tabControl1 как публичную собственность form1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...