如何制作 TopMost 拨动开关

Posted

技术标签:

【中文标题】如何制作 TopMost 拨动开关【英文标题】:How to make TopMost toggle switch 【发布时间】:2020-10-18 00:29:37 【问题描述】:

您好,我正在尝试制作 TopMost 切换开关,代码如下: private void bunifuiosSwitch1_OnValueChange(object sender, EventArgs e)

private void bunifuiOSSwitch1_OnValueChange(object sender, EventArgs e)
        
            Main main = new Main();
            if(bunifuiOSSwitch1.Value == true)
            
                main.TopMost = true;
            
            else
            
                main.TopMost = false;
            
        

起初它在切换到 true 时工作,在切换到 false 时工作,但是当我尝试重新切换它时它没有工作,之后我尝试再次更改代码,但也没有用...... 现在它甚至不是 TopMost。

【问题讨论】:

每次切换都会创建一个新的、不同的Main...因此您将永远无法更改现有Main 的状态。将声明和创建上移一个级别(在事件处理程序之外)。您必须进行一些额外检查,以确保 Main 处于正确显示状态。 你的意思是 Main main = new Main():?如果是,我应该使用 Windows 窗体还是使用 Main?我是 C# 新手 Main 是一种形式...不是吗?!我不明白你最后的评论/问题。 是的 Main 是我要制作 TopMost 的表格 但是这段代码在 Main 里面吗?您是否要让当前表单(即 Main)切换其最顶层的属性?...或者您是否尝试显示第二个表单并切换它? 【参考方案1】:

您需要做的是将对 Main 的引用传递到您的设置表单中。一种方法是调用Show()ShowDialog()

// ... in Form Main ...
private void button1_Click(object sender, EventArgs e)

    Settings settings = new Settings();
    settings.Show(this); // pass in this instance of Main as the "owner" of settings

然后,在“设置”中,您可以将 .Owner 属性转换回 Main 类型并对其执行操作:

// ... in Settings Form ...
private void bunifuiOSSwitch1_OnValueChange(object sender, EventArgs e)

    if (this.Owner!=null && this.Owner is Main)
    
        Main main = (Main)this.Owner;
        main.TopMost = (bunifuiOSSwitch1.Value == true);
    

【讨论】:

谢谢我去试试

以上是关于如何制作 TopMost 拨动开关的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Batch 在可滚动菜单中制作一系列拨动开关?

AD封装按键开关,拨码开关,拨动开关(带3D)

我需要为 Java 制作切换开关 [关闭]

iPhone 垂直拨动开关

检查 locationServicesEnabled 始终返回 YES,无论手动拨动开关决定是不是启用了位置服务

plc不用程序怎么启动run