【问题标题】:Change opacity of another form [duplicate]更改另一种形式的不透明度[重复]
【发布时间】:2013-03-20 01:45:30
【问题描述】:

我正在制作一个程序,我在程序内有另一个表单,其中包含程序选项。选项是Checkboxes,应该启用不透明度。我可以用另一个窗体更改主窗体的不透明度吗?

private void useOpacity_CheckedChanged(object sender, EventArgs e)
{
    if (useOpacity.Checked)
    {
         window().Opacity = .75;
    }
}

这样的……

【问题讨论】:

    标签: c# winforms opacity


    【解决方案1】:

    使用委托

    public class OptionWindow
    {
        public delegate void oppacityDelegate(double value);
        public static event oppacityDelegate oppacity;
    

    调用它

    private void useOpacity_CheckedChanged(object sender, EventArgs e)
    {
         if (useOpacity.Checked)
         {
           oppacity(.75);
         }
    }
    

    并在你的高级课程中抓住它

    OptionWindow.oppacity += ChangeOppacity;
    

    【讨论】:

      【解决方案2】:

      通过选项窗口的构造函数传递MainWindow。然后在您的选项窗口中:

      public class OptionWindow : Form
      {
          Form _mainWindow;                       //YOUR PROGRAM IS OF TYPE Form
      
          public OptionWindow(Form mainWindow)
          {
              this._mainWindow = mainWindow;
          }
      
          private void useOpacity_CheckedChanged(object sender, EventArgs e)
          {
               if (useOpacity.Checked)
               {
                 _mainWindow.Opacity = .75;
               }
           }
      }
      

      这是你在程序中使用OptionWindow的时候

      OptionWindow window = new OptionWindow(this);
      window.Show();
      

      【讨论】:

      • OptionWindow 不是从 System.Windows.Form 派生的类,所以不能有 Show 方法。反正这段代码会循环引用(会导致stackoverflow异常。
      • @NuriYILMAZ 谢谢。它被遗忘了。
      【解决方案3】:

      如果这是父母的子形式,你可以这样做:

      this.Parent.Invoke((MethodInvoker)delegate {
          Form temp = (Form)this.Parent;
          temp.Opacity = 0.75});
      

      【讨论】:

        猜你喜欢
        • 2023-03-06
        • 2013-03-23
        • 1970-01-01
        • 2013-03-04
        • 2021-12-31
        • 2012-09-20
        • 2019-11-26
        • 2020-09-23
        • 2020-08-04
        相关资源
        最近更新 更多