更改另一个表单的面板颜色c#

时间:2018-06-18 11:16:17

标签: c# winforms

我们有两种表单,ABB表单中包含Panel。 (Panel的名称C) 我想使用Color形式更改Panel格式B的{​​{1}}。

这是我尝试过的:

A

此代码不会给我任何错误或警告,但仍然无效。

3 个答案:

答案 0 :(得分:0)

你必须使用OpenForms来完成这项任务。

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

我们假设您使用Form2中的此代码打开了Form1

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

然后从Form1使用此代码:

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

结果如下: enter image description here

答案 1 :(得分: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();

答案 2 :(得分: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);
   }
}