У меня проблема с использованием форм C#. Моя основная форма называется Form1, из которой я могу открыть дочернюю форму с именем x в качестве диалога.Настройка параметров родительской формы от дочернего
Когда я вызываю функцию в моей дочерней форме x, я хочу, чтобы все остальные формы и основная форма были затронуты ею.
public void Change_Layout_Red(System.Windows.Forms.Control Container)
{
if (rb_EmberRed.Checked == true)
{
try
{
foreach (Control ctrl in Container.Controls)
{
if (ctrl.GetType() == typeof(TextBox))
((TextBox)ctrl).BackColor = Color.Red;
if (ctrl.GetType() == typeof(ComboBox))
((ComboBox)ctrl).BackColor = Color.Red;
if (ctrl.GetType() == typeof(DataGridView))
((DataGridView)ctrl).BackColor = Color.Red;
if (ctrl.GetType() == typeof(Label))
((Label)ctrl).ForeColor = Color.White;
if (ctrl.GetType() == typeof(TabPage))
((TabPage)ctrl).BackColor = Color.Black;
if (ctrl.GetType() == typeof(Panel))
((Panel)ctrl).BackColor = Color.Red;
if (ctrl.GetType() == typeof(RadioButton))
((RadioButton)ctrl).ForeColor = Color.White;
if (ctrl.Controls.Count > 0)
Change_Layout_Red(ctrl);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
При нажатии на кнопку в виде ребенка, я хочу, чтобы эта функция работать и применять ко всем формам доступных, она станет как значение по умолчанию.
private void btn_ChangeLayout_Click(object sender, EventArgs e)
{
Change_Layout_Red(Form1.ActiveForm);
}
Этот код изменяет цвета только в активной дочерней форме.
Во-первых, есть ли способ, чтобы эта функция меняла значения по умолчанию для всех новых открытых подформ? Во-вторых, как я могу получить доступ к элементу управления в основной форме Form1? Я попытался добавить Form1.((TextBoX)ctrl).Backcolor = Color.Red
в первую функцию, но он не работает.
Благодаря
Вашего Form1.ActiveForm является формой ребенка, поэтому она содержит только те элементы управления дочерней формы для доступа к элементам управления вашей родительской формы вы можете захотеть используйте Form1.Parent вместо Form1.ActiveForm. –
@MeAndSomeRandoms вы правы, но эта опция недоступна –
foreach (Форма frm в Application.OpenForms) Change_Layout_Red (frm); –