C# 使用第二个窗体更改一个窗体的不透明度

C# 使用第二个窗体更改一个窗体的不透明度,c#,winforms,C#,Winforms,所以我想让我的form2的轨迹栏改变form1的不透明度,但它似乎没有完成工作 public partial class Form2 : Form { public Form2() { InitializeComponent(); } private void trackBar1_Scroll(object sender, EventArgs e) { Form1 frm1 = new Form1();

所以我想让我的form2的轨迹栏改变form1的不透明度,但它似乎没有完成工作

public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }

    private void trackBar1_Scroll(object sender, EventArgs e)
    {
        Form1 frm1 = new Form1();

        frm1.Opacity = trackBar1.Value * 000.1d;

    }
}

不要每次都创建新表单,而是使用现有表单的id:

public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }

    private void trackBar1_Scroll(object sender, EventArgs e)
    {
        // Do not create a new form: Form1 frm1 = new Form1();

        // Use name of original form
        whateverVariableyourCreateedForYourForm.Opacity = trackBar1.Value * 000.1d;

    }
}

您不是在更改Form1的不透明度,而是在更改新Form1的不透明度。您需要确保更改要更改的表单实例的不透明度:

public partial class Form2 : Form
{
    private Form1 form;

    public Form2(Form1 form)
    {
        InitializeComponent();
        this.form = form;
    }

    private void trackBar1_Scroll(object sender, EventArgs e)
    {
        form.Opacity = trackBar1.Value * 000.1d;
    }
  }
}
然后,在创建Form2时,传递要更改的Form1的实例。例如,从表单1中的按钮:

public void opacityChangeButton_Click(object sender , EventArgs e)
{
    Form2 opacityChangeForm = new Form2(this);
    opacityChangeForm.ShowDialog();
}

每次滚动时,都会生成一个新对象
Form1 frm1
。我想你想改变现有表单的不透明度,因为它是一个现有表单,这就是我的问题所在。每次滚动条时都会调用该函数。每次执行
Form1 frm1=new Form1()。这将每次生成一个新的Form1 frm1=new Form1();使用Form1的默认值(默认不透明度值等于1)创建一个新实例,Form1的旧不透明度值自然会丢失。令人惊讶的是,这个问题或其变体经常出现。每天至少一次。我想是时候写一个规范性的问题,并开始将它们作为该问题的副本来结束了。有人知道这是否已经完成了吗?在没有实例的情况下,如何设置不透明度属性的值?它应该是静态的,但你没有说任何关于静态的东西。我错了吗?