0

We have 2 forms, A and B. And the B form has a Panel in it. (Panel's name C) I want to change the Color of the Panel in form B by using the form A.

Here's what I've tried:

B cr = new B();
cr.C.BackColor = Color.FromArgb(0, 0, 255);

This code does not give me any errors nor warnings but still does not work.

4

3 回答 3

1

您必须使用OpenFormswhich 将为您完成这项工作。

你有 Form1 , Form2 和一个面板。首先制作panel修饰符public

假设您Form2通过以下代码打开了Form1

Form2 frm = new Form2();
frm.Show();

然后从 Form1 使用此代码:

Form2 frm = (Form2)Application.OpenForms["Form2"];
frm.panel1.BackColor = Color.Red; 

这是结果: 在此处输入图像描述

于 2018-06-18T11:30:03.407 回答
0

我认为你需要调用线程。在您的 B 类中创建该方法SetColor()

public void SetColor()
{
    MethodInvoker Invoker = new MethodInvoker(delegate
    {
        C.BackColor = Color.FromArgb(0, 0, 255);
    });

    this.Invoke(Invoker);
}

然后调用这个方法SetColor()而不是直接访问BackColor另一个表单的属性。

B cr = new B();
cr.Show();
cr.SetColor();
于 2018-06-18T11:30:47.933 回答
0

取决于您是否要多次更改该颜色。如果是,则在表单“B”上创建带有颜色参数的公共方法,如下所示:

public partial class B : Form 
{
   ...
   public void ChangePanelColor(Color clr)
   {
      panel.BackColor= clr;
   }
   ...
}

完成此操作后,您可以从 A 调用此方法,如下所示:

public partial class A : Form
{
   private B secondForm;
   ...
   // event handler for button with text 'Show Form2'
   private void ShowNewForm(object sender, EventArgs e)
   {
      secondForm = new B();
      secondForm.Show();
   }

   // event handler for button with text 'Change panel color'
   private void ChangePanelColor(object sender, EventArgs e)
   {
      secondForm?.ChangePanelColor(Color.Black);
   }
}
于 2018-06-18T12:03:35.057 回答