【问题标题】:Invisible component above control to filter input控件上方的不可见组件以过滤输入
【发布时间】:2017-04-18 13:28:43
【问题描述】:

我面临的问题是,当另一个控件在上方时,一个控件不可见。

尝试实现类似于:单击不可见面板,面板将事件数据处理到其他类中,并在完成后向嵌套窗口发送类似的单击事件(需要渲染嵌套窗口)。

有可能吗?

编辑:

更多图片..

【问题讨论】:

  • 您查看过opacity 属性吗?
  • @Glitch100 我的不可见控件扩展了Panel 并且它的BackColor 设置为Color.FromArgb(0, Color.Black); 问题是不可见面板下面的控件不会渲染
  • 什么情况下需要过滤事件?只是说..
  • 作为一个选项,您可以使用TransparentPanel 在表单上放置透明覆盖。我在this example 中使用过这种技术。用户只能与透明面板进行交互,而不能与控件交互。在示例中,我决定根据用户点击在透明面板上绘制一些东西,但控件没有收到点击。这是一个小例子,但它与窗体设计器在设计时的工作方式相同。您在设计时看到的控件是真正的控件,没有被禁用,但它们不会收到点击。

标签: c# winforms


【解决方案1】:

似乎解决方案与覆盖以下方法有关:

using System.Windows.Forms;
public class TransparentPanel : Panel
{
    const int WS_EX_TRANSPARENT = 0x20;
    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams cp = base.CreateParams;
            cp.ExStyle = cp.ExStyle | WS_EX_TRANSPARENT;
            return cp;
        }
    }
    protected override void OnPaintBackground(PaintEventArgs e)
    {
    }
}

this example 中的 cmets 提到的隐形面板类中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-26
    • 1970-01-01
    • 2012-04-10
    • 2013-03-08
    相关资源
    最近更新 更多