Иногда бывает нужно обратиться к элементам какой-то формы из другой в процессе выполнения программы. Например, есть форма Form1, из нее мы открываем другую Form2 и теперь, работая в форме Form2 нужно обратиться, получить доступ к элементам родительской формы Form1. Я нашел несколько способов как это сделать.
1-й способ. Передача ссылки в public переменную.
Перед открытием формы, передаем ссылку на нужный элемент в переменную public вызываемой формы.
namespace WindowsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Form2 frm = new Form2(); frm.but1 = this.button1; // передаем ссылку на кнопку в форму Form2 frm.ShowDialog(); } } }
В форме Form2 переменная, в которую передавали ссылку, будет теперь соответствовать кнопке button1 из формы Form1
namespace WindowsApplication1 { public partial class Form2 : Form { public Button but1; // эта переменная будет содержать ссылку на кнопку button1 из формы Form1 public Form2() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { but1.Text = "test"; // меняем текст на кнопке button1 формы Form1 } } }
2-й способ. Передача ссылки в дочернюю форму.
Суть примерна та же, то и в 1-м способе. При открытии формы Form2 передаем в нее ссылку на элемент, который планируем потом менять.
namespace WindowsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Form2 frm = new Form2(this.button1); // передаем ссылку на кнопку в форму Form2 frm.ShowDialog(); } } }
Теперь в форме Form2 нужно создать переменную, которая будет содержать ссылку на эту кнопку и через нее будем обращаться к кнопке на Form1 (строки 5,7,9 и 15).
namespace WindowsApplication1 { public partial class Form2 : Form { private Button but1; // эта переменная будет содержать ссылку на кнопку button1 из формы Form1 public Form2(Button but) // получаем ссылку на кнопку в переменную but { but1 = but; // теперь but1 будет ссылкой на кнопку button1 InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { but1.Text = "test"; // меняем текст на кнопке button1 формы Form1 } } }
3-й способ. Доступ ко всей родительской форме.
Чтобы осуществить это, нужно внести изменения в нескольких файлах, но зато при этом получим доступ ко всем элементам родительской формы и не нужно передавать ссылку на каждый элемент, как в 1-м способе.
Шаг 1. В файле Program.cs создаем публичную переменную f1 (строка 5).
namespace WindowsApplication1 { static class Program { public static Form1 f1; // переменная, которая будет содержать ссылку на форму Form1 [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } }
Шаг 2. Открываем Form1.Designer.cs и в нем у элементов, к которым нужно будет обратиться из другой формы, меняем private на public. Например, сделаем доступной для изменений кнопку button1 на форме Form1.
public System.Windows.Forms.Button button1; // заменили private на public
Шаг 3. При создании формы Form1 присваиваем переменной f1 ссылку на эту форму (строка 7)
namespace WindowsApplication1 { public partial class Form1 : Form { public Form1() { Program.f1 = this; // теперь f1 будет ссылкой на форму Form1 InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Form2 frm = new Form2(); frm.ShowDialog(); } } }
Шаг 4. Теперь из абсолютно любой формы или из любого класса можно обратиться к элементу button1 находящемуся на Form1 так: Program.f1.button1. Например, пусть кнопка в Form2 поменяет текст кнопки на Form1:
namespace WindowsApplication1 { public partial class Form2 : Form { public Form2() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Program.f1.button1.Text = "test"; // Меняем текст на кнопке формы Form1 } } }
Комментарии к статье:
2 дня бился над этой проблемой а решение оказалась на столько простым))
using System.Windows.Forms;
namespace MyFirstApp
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent ();
}
private void button1_Click(object sender, EventArgs e)
{
double x0=Convert.ToDouble(textBox2.Text);
double xk=Convert.ToDouble(textBox1.Text);
double dx=Convert.ToDouble(textBox3.Text);
double a=Convert.ToDouble(textBox3.Text);
textBox5.Text = "Работу выполнил ст.Иванов М.А." +
Environment.NewLine;
//Цикл для табулирования функции
double x =x0;
while (x <= (xk + dx/2))
{
double y = a * Math.Log(x);
textBox5.Text += "X=" + Convert.ToString(x)+
"; Y=" + Convert.ToString(x)+
Environment.NewLine;
x = x + dx;
}
}
}
}
Пожалуйста помогите как обяснить результат
Добавить комментарий: