You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinForm调用静态类Visibility方法后Form1用户控件不显示如何解决

问题根因

Visibility静态类中定义的static Form1 f = new Form1()是独立创建的全新窗体实例,和你当前正在运行、可见的Form1窗口不是同一个对象。你修改的是从未显示到前台的后台实例控件属性,自然不会在可见窗口上生效。

修复方案

方案1:调用时传入当前窗体实例(推荐)

修改Visibility类,删除内部的静态Form1字段,给所有可见性控制方法增加Form1类型的入参:

public static class Visibility
{
    public static void HospodaVisible(Form1 targetForm)
    {
        targetForm.hospoda1.Visible = true;
        targetForm.arena1.Visible = false;
        targetForm.podzemi1.Visible = false;
    }
    public static void ArenaVisible(Form1 targetForm)
    {
        targetForm.hospoda1.Visible = false;
        targetForm.arena1.Visible = true;
        targetForm.podzemi1.Visible = false;
    }
    public static void PodzemiVisible(Form1 targetForm)
    {
        targetForm.hospoda1.Visible = false;
        targetForm.arena1.Visible = false;
        targetForm.podzemi1.Visible = true;
    }
}

修改Form1的按钮点击事件,调用方法时传入当前窗体实例this:

private void button1_Click(object sender, EventArgs e)
{
    Visibility.HospodaVisible(this);
}

方案2:给静态类绑定当前运行的窗体实例

修改Visibility类,新增静态属性存储当前运行的窗体实例:

public static class Visibility
{
    // 存储当前正在运行的Form1实例
    public static Form1 RunningForm { get; set; }
    public static void HospodaVisible()
    {
        if (RunningForm == null) return;
        RunningForm.hospoda1.Visible = true;
        RunningForm.arena1.Visible = false;
        RunningForm.podzemi1.Visible = false;
    }
    // 其余两个方法同理修改为使用RunningForm属性
}

在Form1的加载事件中给静态类的实例属性赋值:

private void Form1_Load(object sender, EventArgs e)
{
    Visibility.RunningForm = this;
    hospoda1.Visible = false;
    arena1.Visible = false;
    podzemi1.Visible = false;
}

注意事项

需要将Form1中hospoda1、arena1、podzemi1三个控件的访问修饰符修改为Internal或Public,否则Visibility类无法访问这些控件属性:你可以在窗体设计器中选中对应控件,在属性面板找到Modifiers选项,修改为Internal即可。

内容的提问来源于stack exchange,提问作者Šimon Novák

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 12:24:04