首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何从C#中的Form返回一个值?

从C#中的Form返回一个值,可以通过以下几种方法实现:

  1. 使用DialogResult属性:

在Form类中,可以使用DialogResult属性来存储返回值。例如,在Form1中,可以设置DialogResult属性为一个值,然后在主窗体中捕获该值。

代码语言:csharp
复制
// 在Form1中设置DialogResult属性
private void button1_Click(object sender, EventArgs e)
{
    this.DialogResult = DialogResult.OK;
}

// 在主窗体中捕获Form1的DialogResult属性
private void button2_Click(object sender, EventArgs e)
{
    Form1 form1 = new Form1();
    DialogResult result = form1.ShowDialog();
    if (result == DialogResult.OK)
    {
        // 处理返回值
    }
}
  1. 使用自定义事件:

可以在Form类中定义一个自定义事件,当需要返回值时触发该事件。主窗体可以订阅该事件,并在事件处理程序中获取返回值。

代码语言:csharp
复制
// 在Form1中定义自定义事件
public event EventHandler<EventArgs<string>> ValueReturned;

private void button1_Click(object sender, EventArgs e)
{
    if (ValueReturned != null)
    {
        ValueReturned(this, new EventArgs<string>("返回值"));
    }
}

// 在主窗体中订阅自定义事件
private void button2_Click(object sender, EventArgs e)
{
    Form1 form1 = new Form1();
    form1.ValueReturned += (s, args) =>
    {
        string returnValue = args.Value;
        // 处理返回值
    };
    form1.ShowDialog();
}
  1. 使用委托:

可以使用委托来实现从Form返回值。定义一个委托类型,并在Form类中定义一个该委托类型的属性。主窗体可以将一个方法赋值给该属性,当Form需要返回值时,调用该方法。

代码语言:csharp
复制
// 定义委托类型
public delegate void ValueReturnedHandler(string value);

// 在Form1中定义委托属性
public ValueReturnedHandler ValueReturned;

private void button1_Click(object sender, EventArgs e)
{
    if (ValueReturned != null)
    {
        ValueReturned("返回值");
    }
}

// 在主窗体中赋值委托属性
private void button2_Click(object sender, EventArgs e)
{
    Form1 form1 = new Form1();
    form1.ValueReturned = (value) =>
    {
        // 处理返回值
    };
    form1.ShowDialog();
}

以上是从C#中的Form返回一个值的三种方法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • C# WinForm国际化的简单实现建议收藏

    软件行业发展到今天,国际化问题一直都占据非常重要的位置,而且应该越来越被重视。对于开发人员而言,在编写程序之前,国际化问题是首先要考虑的一个问题,也许有时候这个问题已经在设计者的考虑范围之内,但终归要开发人员去做实现的。因此,如何实现国际化,是开发人员必须掌握的一项基本技能。 今天,这里要讲的就是,在利用C#进行WinForm开发时,国际化是怎么实现的。鉴于时间及篇幅关系,这里仅仅介绍一种简单的国际化实现方法,可能这里提到的方法已经有非常多人提到过,但笔者还是不厌其烦地介绍一下。 要在C#中实现国际化,需要相关资源文件,比如要在一个软件中支持英文、中文两种语言,那么就必须有这两种语言的资源文件,这在C#中可以采用资源文件(后缀名为.resx)来实现,我们不妨定义英文资源文件名称为Resource.en-US,中文资源文件名称为Resource.zh-CN,两种资源文件所涉及的ID都应该是一样的(这对于其他更多的资源文件均是一样的),只不过是展示的名称不同罢了。 有了这两种资源文件,接下来就要考虑如何做的问题了。为了适应多处使用的情形,这里笔者单独编写了一个类ResourceCulture,该类包含了一些静态方法,主要作用是用来设置当前语言及返回当前的语言的相关字符串。该类代码如下:

    02

    refseq数据库的特点_eureka如何剔除服务

    在SCOTT HANSELMAN 博客上看到一个好东西《Exploring refit, an automatic type-safe REST library for .NET Standard》,他推荐了一个.NET标准1.4 的自动类型安全的REST库refit。 refit 类似于Java的Retrofit,是一套RESTful架构的.NET客户端实现,基于特性,提供把REST API返回的数据转化为(Plain Ordinary C# Object,简单C#对象),POCO to JSON,网络请求(POST,GET,PUT,DELETE等)封装,内部封装使用HttpClient,前者专注于接口的封装,后者专注于网络请求的高效,二者分工协作。我们的应用程序通过 refit请求网络,实际上是使用 refit接口层封装请求参数、Header、Url 等信息,之后由 HttpClient完成后续的请求操作,在服务端返回数据之后,HttpClient将原始的结果交给 refit,后者根据用户的需求对结果进行解析的过程。

    03

    c#实战教程_ps初学者入门视频

    大家好,又见面了,我是你们的朋友全栈君。 C#基础教程-c#实例教程,适合初学者。 第一章 C#语言基础 本章介绍C#语言的基础知识,希望具有C语言的读者能够基本掌握C#语言,并以此为基础,能够进一步学习用C#语言编写window应用程序和Web应用程序。当然仅靠一章的内容就完全掌握C#语言是不可能的,如需进一步学习C#语言,还需要认真阅读有关C#语言的专著。 1.1 C#语言特点 Microsoft.NET(以下简称.NET)框架是微软提出的新一代Web软件开发模型,C#语言是.NET框架中新一代的开发工具。C#语言是一种现代、面向对象的语言,它简化了C++语言在类、命名空间、方法重载和异常处理等方面的操作,它摒弃了C++的复杂性,更易使用,更少出错。它使用组件编程,和VB一样容易使用。C#语法和C++和JAVA语法非常相似,如果读者用过C++和JAVA,学习C#语言应是比较轻松的。 用C#语言编写的源程序,必须用C#语言编译器将C#源程序编译为中间语言(MicroSoft Intermediate Language,MSIL)代码,形成扩展名为exe或dll文件。中间语言代码不是CPU可执行的机器码,在程序运行时,必须由通用语言运行环境(Common Language Runtime,CLR)中的既时编译器(JUST IN Time,JIT)将中间语言代码翻译为CPU可执行的机器码,由CPU执行。CLR为C#语言中间语言代码运行提供了一种运行时环境,C#语言的CLR和JAVA语言的虚拟机类似。这种执行方法使运行速度变慢,但带来其它一些好处,主要有:  通用语言规范(Common Language Specification,CLS):.NET系统包括如下语言:C#、C++、VB、J#,他们都遵守通用语言规范。任何遵守通用语言规范的语言源程序,都可编译为相同的中间语言代码,由CLR负责执行。只要为其它操作系统编制相应的CLR,中间语言代码也可在其它系统中运行。  自动内存管理:CLR内建垃圾收集器,当变量实例的生命周期结束时,垃圾收集器负责收回不被使用的实例占用的内存空间。不必象C和C++语言,用语句在堆中建立的实例,必须用语句释放实例占用的内存空间。也就是说,CLR具有自动内存管理功能。  交叉语言处理:由于任何遵守通用语言规范的语言源程序,都可编译为相同的中间语言代码,不同语言设计的组件,可以互相通用,可以从其它语言定义的类派生出本语言的新类。由于中间语言代码由CLR负责执行,因此异常处理方法是一致的,这在调试一种语言调用另一种语言的子程序时,显得特别方便。  增加安全:C#语言不支持指针,一切对内存的访问都必须通过对象的引用变量来实现,只允许访问内存中允许访问的部分,这就防止病毒程序使用非法指针访问私有成员。也避免指针的误操作产生的错误。CLR执行中间语言代码前,要对中间语言代码的安全性,完整性进行验证,防止病毒对中间语言代码的修改。  版本支持:系统中的组件或动态联接库可能要升级,由于这些组件或动态联接库都要在注册表中注册,由此可能带来一系列问题,例如,安装新程序时自动安装新组件替换旧组件,有可能使某些必须使用旧组件才可以运行的程序,使用新组件运行不了。在.NET中这些组件或动态联接库不必在注册表中注册,每个程序都可以使用自带的组件或动态联接库,只要把这些组件或动态联接库放到运行程序所在文件夹的子文件夹bin中,运行程序就自动使用在bin文件夹中的组件或动态联接库。由于不需要在注册表中注册,软件的安装也变得容易了,一般将运行程序及库文件拷贝到指定文件夹中就可以了。  完全面向对象:不象C++语言,即支持面向过程程序设计,又支持面向对象程序设计,C#语言是完全面向对象的,在C#中不再存在全局函数、全局变量,所有的函数、变量和常量都必须定义在类中,避免了命名冲突。C#语言不支持多重继承。 1.2 编写控制台应用程序 使用SDK命令行工具编写控制台程序 第一个程序总是非常简单的,程序首先让用户通过键盘输入自己的名字,然后程序在屏幕上打印一条欢迎信息。程序的代码是这样的: using System;//导入命名空间。//为C#语言新增解释方法,解释到本行结束 class Welcome//类定义,类的概念见下一节 { /*解释开始,和C语言解释用法相同 解释结束*/ static void Main()//主程序,程序入口函数,必须在一个类中定义 { Console.WriteLine(“请键入你的姓名:”);//控制台输出字符串 Console.ReadLine();//从键盘读入数据,输入回车结束 Console.WriteLine(“欢迎!”); } } 可以用任意一种文本编辑软件完成上述代码的编写,然后把文件存盘,假设文件名叫做welcome.c

    01

    如何将asp.net的后台cs代码移动到页面上

    在做项目时,我们一般会将aspx文件和其后台cs文件分开,然后将后台的cs文件编译成dll发布到生产环境中。如果我们的项目规定是每周1发布一次,现在发布后第二天客户在其中某个页面发现一个Bug导致业务无法正常处理,这个时候我们的项目正在添加新的功能,编码还没有完成,不可能为了这一个页面而将这没有完成的整个项目重新发布到生产环境中,这个时候怎么办拉? 我们知道aspx运行有两种模式,一种是编译运行,一种是解释运行.编译运行就是我们将后台c#代码编译成Dll,在aspx页面运行时调用这个dll来执行.而解释执行就是像是asp一样将后台代码和页面代码放在同一个aspx页面上,由IIS解释c#代码来运行.于是我们想到的解决办法就是专门针对这个页面把其后台CS代码中的bug修正,测试没有问题了,然后将后台cs文件转移到aspx文件中,让将这个新的aspx文件复制到正式环境中,覆盖原来错误的aspx文件。 将后台的cs代码转移到页面上主要是做如下操作: 1.去掉aspx头Page部分的CodeFile属性,这个属性指示了页面的后台文件的文件名. 2.在Page中添加Inherits属性,这个属性的值是页面后台文件的父类,如果页面的父类是System.Web.UI.Page,那么可以不加这个属性. 3.将后台代码所使用的名字空间添加到aspx的头,使用<%@ Import Namespace="名字空间" %>进行引入. 4.在aspx页面的最下面添加<script runat="server"></script>,然后将后台代码中类里面的所有变量,属性,方法等等都放在script中. 通过以上几步我们就可以将后台cs文件转移到aspx页面上,这样让IIS直接解释aspx文件执行,而不是通过调用发布后的dll执行. 出于平时需要即时修改一个单独页面,所以我写了一个小程序来自动转换后台cs文件到aspx文件中. 比如一个页面:

    02

    C# WINFORM通过委托和事件窗体间(跨窗体)传值(自定义事件参数)--实例详解

    C# WINFORM通过委托和事件窗体间(跨窗体)传值(自定义事件参数)--实例详解 在C# WINFORM的日常开发中,我们通常需要遇到跨窗体传值这一问题,实现的方式也是有很多的,今天给大家分享一种通过委托和事件来实现的传值方式。不多说废话,我将用一个具体的实例来跟大家说明怎么样利用很委托和事件以及自定义的参数来实现跨窗体传值。 例如:程序中我们有一个主窗体,其中文本框的值是我们需要从另外一个窗体中获取的 在这个表单窗体中,填写完整联系人地址信息后,我们希望把这些信息回传到主窗体中 好了,效果已展示,下面

    07
    领券