构造函数可以传任意类型的值,并可以同时传多个值

结构函数传值的初步应用——简单的登陆式界面

现在我有两个窗体Form3和Form4,如下,如何点击Form3中的按钮后,打开Form4并将Form3中的textbox中的值传给Form4的label?

1、点击Form3中的按钮打开Form4    2、获取Form3中的值    3、传值给Form4中的label

一、获取Form3中textbox1的值

button1的点击事件:

namespace 记事本
{
public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
}
//button1的点击事件
private void button1_Click(object sender, EventArgs e)
{
string s = textBox1.Text;//获取Form3中textbox的值 Form4 f4 = new Form4();//创建新的Form4
f4.Show();//展示Form4
}
}

获取Form3中button1的值,并打开Form4窗体

二、通过构造函数传值 - 在新建Form4时将值传入,同时Form4的结构函数要接收相同类型的值,比如例子中传入string类型的值

namespace 记事本
{
public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
}
//button1的点击事件
private void button1_Click(object sender, EventArgs e)
{
string s = textBox1.Text;//获取Form3中textbox的值 Form4 f4 = new Form4(s);//创建新的Form4,并将数据s传入
f4.Show();//展示Form4
}
}
}

Form3 传值

namespace 记事本
{
public partial class Form4 : Form
{
string str = null;//定义一个变量 public Form4(string txt)
{
InitializeComponent(); str = txt;//变量接收传入的值
}
}
}

Form4 接收传入的值

三、将接收的值赋值给label1

namespace 记事本
{
public partial class Form4 : Form
{
string str = null;//定义一个变量 public Form4(string txt)
{
InitializeComponent(); str = txt;//变量接收传入的值
label1.Text = str;//赋值
}
}
}

赋值

四、测试:

=============================================================

结构函数传值的初步应用——关闭应用程序

如何关闭程序?比如说,系统启动时启动的是<启动页面Form3>,打开<主页面Form4>后,关闭Form4并不能关闭程序,而当关闭Form3时,程序才会关闭。

可是当关闭<主页面Form4>时并不能关闭<启动页面Form3>,程序依然无法退出,此时该如何关闭程序呢?

方法:将<启动页面Form3>窗体传入<主页面Form4>,此时Form4可以控制Form3行为,设置Form4关闭时,Form3同时关闭,即可实现应用程序关闭。

将窗体传入?将窗体传入后,既可以实现在一个窗体中控制另一个窗体

如何将窗体传入?(this - 代码所在的窗体)

 public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
}
//button1的点击事件
private void button1_Click(object sender, EventArgs e)
{
Form4 f4 = new Form4(this);//创建新的Form4,并将窗体本身传入
f4.Show();//展示Form4
}
}

Form3 传值

public partial class Form4 : Form
{
Form3 F3 = new Form3();//实例化一个Form3的变量 public Form4(Form3 f3)//传入窗体
{
InitializeComponent(); F3 = f3;//接收窗体
}
}

From4 接收传值

设置Form4关闭时Form3关闭

public partial class Form4 : Form
{
Form3 F3 = new Form3();//实例化一个Form3的变量 public Form4(Form3 f3)//传入窗体
{
InitializeComponent(); F3 = f3;//接收窗体
}
//Form4关闭时
private void Form4_FormClosing(object sender, FormClosingEventArgs e)
{
F3.Close();//Form3 窗体关闭指令
}
}

设置Form4关闭时Form3关闭

测试可以

同理,如何在Form4打开时隐藏Form3?

Form3 F3 = new Form3();//实例化一个Form3的变量

        public Form4(Form3 f3)//传入窗体
{
InitializeComponent(); F3 = f3;//接收窗体
F3.Visible = false;//Form3 窗体不显示
}

隐藏登入界面

=============================================================

结构函数传值的初步应用——打开唯一窗体

在上面例子中,设置Form4在启动时From3不隐藏,且关闭Form4时不关闭Form3,你会发现,每次点击From3中按钮都会出现一个新的Form4

如何实现打开唯一窗体?

方法:在Form3中设置一个变量 public int count= 0(访问修饰符必须为public才可以跨窗体访问);判断 count 如果为0,则打开新的Form4,然后 count ++;如果 count 不为0,不打开新的Form4。

如果关闭了Form4,此时Form3中的 count 仍不为0,再点按钮是打不开Form4的,也就是说只是实现了只打开一次Form4。

如何实现在关闭Form4时将Form3中的 count 变为0?如果将 count 传入Form4,Form3是无法访问到Form4中的 count 的。

将Form3传值进Form4,在Form4关闭时让 count 变为0

public partial class Form3 : Form
{
public int count = ;
public Form3()
{
InitializeComponent();
}
//button1的点击事件
private void button1_Click(object sender, EventArgs e)
{
if (count == )
{
count++;
Form4 f4 = new Form4(this);//创建新的Form4,并将窗体本身传入
f4.Show();//展示Form4
}
}
}

Form3 代码

public partial class Form4 : Form
{
Form3 F3 = new Form3();//实例化一个Form3的变量
public Form4(Form3 f3)//传入窗体
{
InitializeComponent(); F3 = f3;//接收窗体
}
//Form4关闭时
private void Form4_FormClosing(object sender, FormClosingEventArgs e)
{
F3.count--;
}
}

Form4 代码

测试,即可实现打开唯一窗口

C#-WinForm-跨窗体 构造函数传值 及应用—登录式窗口传值、如何关闭主页面时关闭应用程序、如何打开唯一窗口—★★★★★五星重量级的更多相关文章

  1. C#-WinForm-★★★★★跨窗体 构造函数传值 及应用—登录式窗口传值、如何关闭主页面时关闭应用程序、如何打开唯一窗口★★★★★

    构造函数可以传任意类型的值,并可以同时传多个值 结构函数传值的初步应用——简单的登陆式界面 现在我有两个窗体Form3和Form4,如下,如何点击Form3中的按钮后,打开Form4并将Form3中的 ...

  2. Winform跨窗体操作控件(使用委托)

    Winform跨窗体操作控件是winform开发中很常见的形式,最常见且简单有效的方式便是使用委托的方式来进行操作,下面我将通过一个小实例来说明如何使用委托跨窗体实现控件操作. 实例介绍:两个窗体,F ...

  3. C# Winform多窗体&&构造函数传值

    一.多窗体:三种打开窗体的状态: 最最基础的弹窗: //写在按钮的点击事件内: //实例需要弹出的窗口的类: Form2 f2 = new Form2(); f2.Show(); 1.弹窗窗口: // ...

  4. WinForm跨窗体传值

    1.另一窗体建公共变量listdataRow public List<DataGridViewRow> listdataRow = new List<DataGridViewRow& ...

  5. winform 跨窗体给控件传值 分类: WinForm 2014-08-02 16:33 195人阅读 评论(0) 收藏

    两个窗体 FormA,FormB; FormA窗体中有一文本框控件:TextBox; FormB窗体中有一变量:txtJSJ 目的:把变量赋值给文本框 实现: 设置TextBox属性: Modifie ...

  6. C#winform跨窗体传值和调用事件的办法

    有三个窗体,分别是Main主窗体,Form1窗体1,From2窗体2,其中Main是主窗体,Form1窗体1是一个消息通知窗体,Form2窗体2主窗体的一个子窗体,程序启动时,消息框窗体1弹出,通过消 ...

  7. Winform 主窗体更换 构造函数传值

    制作登录窗体: 制作一个登陆窗体,实现点击按钮关闭此窗体并打开另一个窗体 直接在按钮点击事件中,实例化一个想要打开的窗体 使用show方法打开,并把登陆窗体的visible属性改为false Form ...

  8. winform打开唯一窗体、构造函数传值

    制作登入窗体: 制作一个登陆窗体,实现点击按钮关闭此窗体并打开另一个窗体 直接在按钮点击事件中,实例化一个想要打开的窗体 使用show方法打开,并把登陆窗体的visible属性改为false Form ...

  9. C#跨窗体传值的几种方法分析(很详细)

    创建一个Winform窗体应用程序项目,然后添加一个Form2窗体. 在Form1和Form2中各添加一个textBox和button: 单击Form1中的button1,弹出Form2,然后要做的就 ...

随机推荐

  1. Windows 2008 R2 64位上安装wamp失败的原因

    Exception Exception in module wampmanager.exe at 000F15A0... 因测试PHP程序需要,需要在windows系统上布署WAMP环境测试程序,对性 ...

  2. Mantis1.2.19 在Windows 平台上的安装配置详解

    安装环境: WindowsXP 32 Apache2.2.22+PHP5.4.39+MySQL5.5.28 一.简介 MantisBT是由PHP开发的.基于WEB的缺陷跟踪系统,并采用开源数据库MyS ...

  3. mui禁止滚动条和禁止滚动

    mui.plusReady(function () { plus.webview.currentWebview().setStyle({ scrollIndicator: 'none' }); }); ...

  4. iOS多线程之GCD详解

    GCD(Grand Central Dispatch)是基于C语言开发的一套多线程开发机制.也是目前苹果官方推荐的多线程开发方法.iOS三种多线程开发中GCD是抽象层次最高的.当然用起来也是最简单的. ...

  5. python处理经过gzip压缩的网页内容

    Python在进行网页抓取时,有时会获取到经过gzip压缩后的数据(体积小,传输快),导致无法阅读和使用. 如图所示,为http原始报文.可以看到,header区域的“Content-Encoding ...

  6. 50个查询系列-第13个查询:把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩;

    UPDATE tblscore SET tblscore.Score= ( -- 这里开始算叶平的平均值 SELECT AVG(tt.aa) FROM ( SELECT tblscore.Score ...

  7. C# Tostring 格式化输出字符串全解

    C 货币 2.5.ToString("C") ¥2.50 D 十进制数 .ToString("D5") E 科学型 .ToString("E" ...

  8. 解决MWPhotoBrowser中的SDWebImage加载大图导致的内存警告问题

    下面两种现象,用同一种方法解决 1.解决MWPhotoBrowser中的SDWebImage加载大图导致的内存警告问题 2.突然有一天首页访问图片很慢,至少隔20多秒所有图片才会出来.(解析:app使 ...

  9. nginx认证配置

      rpm -qa|grep httpd-tools yum install httpd-tools ###这样不仅可以使用ab工具,还可以使用htpasswd工具了     虚拟主机 ->&g ...

  10. Android -- ViewDragHelper

    ViewDragHelper SlidingPaneLayout和DrawerLayout,现在这俩个类被广泛的运用,其实研究他们的源码你会发现这两个类都运用了ViewDragHelper来处理拖动. ...