【问题标题】:Transparent background on system::windows::forms::formsystem::windows::forms::form 上的透明背景
【发布时间】:2012-07-31 12:13:54
【问题描述】:

我有一个 System::Windows::Forms::Form 并且我正在尝试将背景设置为透明。 此表单包含其他组件并具有背景图像。

我尝试了许多我在互联网上看到的解决方案,但没有任何效果。

  • 将表单不透明度设置为 0 -> 使整个表单变得透明。
  • 使用颜色::透明 -> 似乎不起作用
  • 使用 TransparencyKey -> 似乎也不起作用...
  • 覆盖 OnPaintBackground 或 OnPaint 事件 -> 似乎没有调用事件...

图解代码:

    public ref class Form : public System::Windows::Forms::Form
    {
         public: Form(void) {
             InitializeComponent();
         }

         public: void InitializeComponent(void)
         {
             SetStyle(ControlStyles::SupportsTransparentBackColor, true);
             this->TransparencyKey = System::Drawing::Color::Fuchsia;
             this->BackColor = System::Drawing::Color::Fuchsia;
             // or ...
             this->BackColor = System::Drawing::Color::Transparent;
         }

         protected: virtual void OnPaint(PaintEventArgs e)override {}
         protected: virtual void OnPaintBackground(PaintEventArgs e)override {}
    }

感谢您的帮助。 西比尔

编辑:

问题解决了,首先是覆盖,它是:

protected: virtual void OnPaint(PaintEventArgs^ e)override {}
protected: virtual void OnPaintBackground(PaintEventArgs^ e)override {}

我只是忘记了 ^。 然后,我不知道为什么,但是我开始了一个新项目并尝试了其他方法,并且效果很好。所以从现在开始我使用这个新项目,一切都很好。我猜只是 Visual C++ 出现了一些随机问题。

【问题讨论】:

  • 不要编辑 InitializeComponent(),它是由设计者自动生成的。当设计师重新生成代码时,您在那里编写的任何内容都会随机消失。将代码移至构造函数, InitializeComponent() 调用之后。

标签: .net winforms visual-c++ background transparency


【解决方案1】:

问题解决了,首先是覆盖,是:

protected: virtual void OnPaint(PaintEventArgs^ e)override {}
protected: virtual void OnPaintBackground(PaintEventArgs^ e)override {}

我只是忘记了 ^。然后,我不知道为什么,但是我开始了一个新项目并尝试了其他方法,并且效果很好。所以从现在开始我使用这个新项目,一切都很好。我猜只是 Visual C++ 出现了一些随机问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-07
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    • 2020-09-18
    • 1970-01-01
    • 2016-09-24
    • 2010-11-22
    相关资源
    最近更新 更多