C# - 如何使两个表单相互引用

2024-03-03

我正在用 MS Visual C# 编写一个 WindowsForms 应用程序,我需要两个表单才能相互引用。在测试时,我在 Form1 上创建了两个按钮 - 一个按钮显示 Form2,另一个按钮隐藏它(代码如下)。

我想对 Form2 做同样的事情——创建两个隐藏或显示 Form1 的按钮。我使用了与 Form1 相同的方法,但是当我编译应用程序时,它似乎陷入了无限循环,并且我收到了 StackOverflow 消息。

如何更改代码以便两种形式能够相互引用?

表格1代码:

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
    Form2 frm2;
    public Form1()
    {
        InitializeComponent();
        frm2 = new Form2();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        frm2.Visible = false;
    }

    private void button2_Click(object sender, EventArgs e)
    {
        frm2.Visible = true;
    }
}
}

表格2代码:

namespace WindowsFormsApplication1
{
public partial class Form2 : Form
{
    Form1 frm1;
    public Form2()
    {
        InitializeComponent();
        frm1 = new Form1();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        frm1.Visible = false;
    }

    private void button2_Click(object sender, EventArgs e)
    {
        frm1.Visible = true;
    }
}
}

Forms2的代码应该是

namespace WindowsFormsApplication1
{
public partial class Form2 : Form
{
    Form1 frm1;
    public Form2(Form1 parent)
    {
        InitializeComponent();
        frm1 = parent;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        frm1.Visible = false;
    }

    private void button2_Click(object sender, EventArgs e)
    {
        frm1.Visible = true;
    }
}
}

即使两者相互通信,也必须先创建一个并将其传递给第二个。

表格 1 需要调整为

public Form1()
{
    InitializeComponent();
    frm2 = new Form2(this);
}

另一种方法是创建两者并在构建后传递它

namespace WindowsFormsApplication1
{
public class SomewhereElse
{
    public void SomeFunction()
    {
         Form1 form1= new Form1();
         Form2 form2= new Form2();

         form1.frm2 = form2;
         form2.frm1 = form1;
    }
}

public partial class Form2 : Form
{
    public Form1 frm1 {get; set;}
    public Form2(Form1 parent)
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        frm1.Visible = false;
    }

    private void button2_Click(object sender, EventArgs e)
    {
        frm1.Visible = true;
    }
}

public partial class Form1 : Form
{
    public Form2 frm2 {get; set;}
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        frm2.Visible = false;
    }

    private void button2_Click(object sender, EventArgs e)
    {
        frm2.Visible = true;
    }
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# - 如何使两个表单相互引用 的相关文章

  • MVC 重定向到没有控制器的视图

    希望应该是一个简单的 我创建了一个通用错误视图 当整个站点的操作方法内发生异常时 我想显示该视图 我创建了一个部分页面 所有导航都位于其中 因此我不需要在此视图上使用控制器 那么如何从控制器内的操作方法重定向到它 像这样的东西 HttpPo
  • 检查列表是否包含另一个列表。 C#

    编辑 只是说 ContainsAllItem 中的注释解释得最好 很抱歉问这个问题 我知道以前有人问过这个问题 但我只是不明白 好的 所以我想检查一个列表是否包含另一个列表中的所有项目WITHOUT重叠 以及根据类字符串 名称变量 称为项目
  • WebClient读取错误页面的内容

    我有一个加载页面内容的应用程序 我使用 WebClient 类 即使服务器返回 404 500 等错误 我也需要检索内容 我需要这样的东西 WebClient wc new WebClient string pageContent try
  • 通过单个 GPIO 引脚转储闪存

    我正在使用 Infineon 的 XMC4500 Relax Kit 并尝试通过单个 GPIO 引脚提取固件 我非常天真的想法是通过 GPIO 引脚一次转储一位 然后用逻辑分析仪以某种方式 嗅探 数据 伪代码 while word by w
  • 返回 int& 的函数[重复]

    这个问题在这里已经有答案了 我在网上查了一下发现一篇试图解释的文章std move和右值 http thbecker net articles rvalue references section 01 html并发现了一些我实在无法掌握的东
  • 如何使用汇编获取BIOS时间?

    我正在从头开始实现一个小型操作系统 用于教育目的 现在 我想使用汇编来获取 BIOS 时间 我对此进行了很多搜索 但找不到任何代码示例来执行此操作 如果有人可以提供任何参考或代码示例或与此相关的任何内容 我将非常感激 See 时钟中断 1a
  • 将 C# 反射代码移植到 Metro-Ui

    我正在尝试移植使用反射的现有 C 类 通用工厂 但我无法编译这段代码 Type types Assembly GetAssembly typeof TProduct GetTypes foreach Type type in types i
  • 在通过网络发送之前压缩位图

    我正在尝试通过网络发送位图屏幕截图 因此我需要在发送之前对其进行压缩 有一个库或方法可以做到这一点吗 当您将图像保存到流时 您have选择一种格式 几乎所有位图格式 bmp gif jpg png 都使用一种或多种压缩形式 因此 只需选择适
  • 使用反射获取基类的受保护属性值

    I would like to know if it is possible to access the value of the ConfigurationId property which is located in the base
  • 在“using”语句中使用各种类型 (C#)

    自从C usingstatements只是try finally dispose 的语法糖 为什么它接受多个对象仅当它们属于同一类型时 我不明白 因为它们需要的只是 IDisposable 如果它们都实现 IDisposable 应该没问题
  • 为什么重载方法在 ref 仅符合 CLS 方面有所不同

    公共语言规范对方法重载非常严格 仅允许根据其参数的数量和类型来重载方法 如果是泛型方法 则根据其泛型参数的数量进行重载 根据 csc 为什么此代码符合 CLS 无 CS3006 警告 using System assembly CLSCom
  • 如何在 C# 中使用 XmlDsigC14NTransform 类

    我正在尝试使用规范化 xml 节点System Security Cryptography Xml XMLDsigC14nTransformC net Framework 2 0 的类 该实例需要三种不同的输入类型 NodeList Str
  • 为什么WCF中不允许方法重载?

    假设这是一个ServiceContract ServiceContract public interface MyService OperationContract int Sum int x int y OperationContract
  • 如何在 VS Code 中为 CMake 项目设置 C/C++ IntelliSense?

    我正在尝试使用 libTooling 编写一个工具 我对其进行了设置 以便它可以使用 LLVM 文档中的示例进行编译 然而 C C IntelliSense 似乎不适用于 CMake 项目 我的工具位于
  • realloc():重新分配为 char * 上的 strcat 腾出空间时下一个大小无效 [重复]

    这个问题在这里已经有答案了 我在以下代码中收到无效内存错误 printf s n FINE 5 printf s LENGTH IS d n FINE 6 strlen buffer char realloc buffer strlen b
  • 在 SQL Server 上执行分页的最佳方式是什么?

    我有一个数据库超过200万记录 我需要执行分页以在我的 Web 应用程序上显示 该应用程序每页必须有 10 条记录DataGrid 我已经尝试使用ROW NUMBER 但是这种方式会选择所有 200 万条记录 然后只得到 10 条记录 我也
  • 如何将 CSV 文件读入 .NET 数据表

    如何将 CSV 文件加载到System Data DataTable 根据CSV文件创建数据表 常规 ADO net 功能是否允许这样做 我一直在使用OleDb提供者 但是 如果您正在读取具有数值的行 但希望将它们视为文本 则会出现问题 但
  • 是否有任何不使用公共虚拟方法的正当理由? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 是否有任何不使用公共虚拟方法的正当理由 我在某处读到我们应该避免使用公共虚拟方法 但我想向专家确认这是否是有效的声明 对于良好且稳定的 API
  • 正在获取“未终止 [] 设置”。 C# 中的错误

    我正在 C 中使用以下正则表达式 Regex find new Regex url
  • c# 替代方案中 cfusion_encrypt 中填充的密钥是什么?

    我找到了从这里复制 C 中的 cfusion encrypt 函数的答案 ColdFusion cfusion encrypt 和 cfusion decrypt C 替代方案 https stackoverflow com questio

随机推荐

  • jSeparator 外观 - 预览设计与运行文件 (netbeans)

    我有这个小问题 我正在使用 Netbeans 当我单击 预览设计 时 我看到的 jSeparators 如下所示 但是当我运行该项目时 它是这样的 我该如何解决这个问题 我希望该项目看起来像预览设计 Thanks 当您运行窗口时 JFram
  • WPF 列表框项目不自动换行

    My ListBox其中有一个可能很长的描述字段 我不想使用水平滚动条 而是想自动换行 如果我设置它就有效MaxWidth但自从ListBox更改大小我不想对值进行硬编码 最好的方法是什么 编辑 描述位于TextBlock 简化的XAML
  • xml删除php中的子节点

    我试图通过 id 属性删除 druzenje 元素 我知道要做到这一点 我必须从该元素中删除所有子节点
  • 输出到精确的流浮点数

    我的浮点数精度有问题 int main void double b 106 829599 float a b std cerr lt lt std setprecision 6 lt lt a lt lt a lt lt b lt lt b
  • phonegap运行android报错

    每当我尝试使用构建项目时phonegap run 我收到以下错误 C Users MS AwaN my app gt phonegap run android phonegap detecting Android SDK environme
  • 学习 WCF RIA 服务的最佳资源

    您正在查看哪些书籍 视频 文章来了解如何使用新发布的 Silverlight WCF RIA 服务 1 起点是http www silverlight net getstarted riaservices http www silverli
  • nginx:将 ssl 连接转发到另一台服务器

    我有一个 nginx 主服务器 决定将请求路由到的传入服务器名称 对于两个辅助服务器 此主 nginx 服务器还保存 ssl 证书和密钥 第三台服务器拥有自己的证书和密钥 因为这些证书和密钥的更新过程很频繁 我现在的问题是如何配置主 ngi
  • 设置 svnperms 预提交挂钩

    我正在尝试将 svnperms 实现到存储库中 但在一些事情上遇到了困难 pre commit具有执行权限 rwxrwxr x 1 svnadm svn 3018 May 27 10 11 pre commit 这是我在预提交中对 svnp
  • BBP 算法所需的工作精度?

    我希望在低内存环境中计算 Pi 的第 n 位数字 由于我没有可用的小数 这Python 中的纯整数 BBP 算法 http en literateprograms org Pi with the BBP formula 28Python 2
  • vuetify-loader 1.6 与 laravel mix 不兼容,vue-loader 15 目前不支持 oneOf 的 vue 规则

    我正在尝试在 laravel 上安装 vue 我相信我明白了 但是当我运行 npm run watch 或 npm run dev 时 它会生成此错误 我尝试了几件事但无法解决 Error VueLoaderPlugin Error vue
  • Excel:使用外部链接可以提高性能吗?

    我想知道使用外部链接与打开电子表格和复制单元格 使用 VBA 相比是否有性能提升 我想 Excel 必须以同样的方式打开文件 但是当我使用以下代码进行测试时 外部链接速度更快 Dim t As Double Dim rng As Range
  • 使用 Xcode 6 从命令行进行 UIAutomation 测试调用

    在新的 Xcode 版本中 从命令行运行 UIAutomation 测试似乎经常会中断 根据过去的帖子判断 由于从未使用过命令行脚本 我发现了 2012 年的这篇文章 来自命令行的自动化仪器 https stackoverflow com
  • setup.py:如何查找用户指定的括号内的附加内容

    我有一个通过 PyPI 分发的包 其中包含大量数据 PyPI 有 100MB 的限制 我想分发比这更多的数据 数据相当不变 因此在每次代码发布时不断将大量数据推送到 PyPI 似乎也很浪费 相反 我更愿意分发最少的数据 并将大数据选项作为可
  • d3:不规则/分散数据的等高线或曲面图

    我可以采用一组三元组 X Y Z 并立即使用 Python 和 matplotlib 生成一个 平滑 等高线图单次通话 to 三角轮廓 https matplotlib org examples pylab examples tricont
  • 实时调试堆栈溢出

    我有一个托管代码 Windows 服务应用程序 由于托管 StackOverFlowException 该应用程序在生产中偶尔会崩溃 我知道这一点是因为我在崩溃模式下运行了 adplus 并使用 SoS 事后分析了崩溃转储 我什至附加了 W
  • Firebase:从 UID 获取 DisplayName [重复]

    这个问题在这里已经有答案了 我将用户的显示名称存储在 Firebase Auth 中 当同一用户登录时 从 Firebase Auth 获取很简单 但是 当另一个用户登录时 当我拥有帐户的唯一 UID 用户 ID 时 如何获取帐户的显示名称
  • 在 WebApplicationFactory 的配置源中关闭“ReloadOnChange”

    这既是一个问题 也是一个答案 我已经解决了我的问题 但似乎有点不对劲 我最初的问题是在 bitbucket 管道中运行我的 ASP NET Core 集成测试 原因是System IO IOException The configured
  • 不允许 HTTPS 页面运行来自 safari-extension:// URI 的不安全内容

    我在 Safari 9 1 11601 5 17 1 的 Safari 扩展中遇到了奇怪的行为 我尝试使用 safari extension 插入一个新的 Iframe 其 src 指向扩展包中的 html 文件 如果我单击控制台中显示的错
  • 无法在 Google 操作中使用隐式/授权流程来授权用户

    我正在尝试链接到该帐户 这是我的谷歌云功能 var AuthHandler function this googleSignIn googleSignIn this googleSignInCallback googleSignInCall
  • C# - 如何使两个表单相互引用

    我正在用 MS Visual C 编写一个 WindowsForms 应用程序 我需要两个表单才能相互引用 在测试时 我在 Form1 上创建了两个按钮 一个按钮显示 Form2 另一个按钮隐藏它 代码如下 我想对 Form2 做同样的事情