窗体

C#使用委托窗体传值 From1 to From2

非 Y 不嫁゛ 提交于 2020-03-03 17:04:12
Program.cs namespace _04 { //声明委托 public delegate string DelGetString ( ) ; Form2.Designer.cs partial class Form2 { public DelGetString _getFrm1String ; //定义一个字段,用来存储传过来的函数 //存储方法,只能用字段。不能用属性 public Form2 ( DelGetString getSting ) { this . _getFrm1String = getSting ; InitializeComponent ( ) ; } From1.cs new From2时,通过From2构造函数发送方法 private void btnUpdataPwd_Click ( object sender , EventArgs e ) { //使用委托窗体传值 Form2 frm2 = new Form2 ( putString ) ; //把方法扔给Form2 //new 新窗口 frm2 . Show ( ) ; } public string putString ( ) { return txtName . Text ; //要传递的值 } 最终,From2调用From1的方法,获取From1中组件的值 private void

VC/MFC子窗体向父窗体传递参数的几种方法

巧了我就是萌 提交于 2020-03-01 13:54:57
VC/MFC子窗体向父窗体传递参数的几种方法 典型问题举例 窗体和子窗体均有一个Edit控件和一个按钮,点击父窗体按钮显示子窗体;点击子窗体按钮后,子窗体中Edit控件的值显示在在父窗体中的Edit控件中。 在MFC中实现子窗体向父窗体传递参数的几种方法简述 1、在父窗体定义静态变量 2、传窗体的指针给子窗体 3、子窗体调用GetParent 4、向父窗体sendMessage 方法1,使用静态变量,如果有多个子对象和父对象存在时,处理比较麻烦。 方法2, 传指针给子窗体,子窗体需要另外保存这个指针,此方法可由方法3替代。 方法3, 比方法2优,但与方法2都与父窗体耦合较深。 方法4,推荐采用方法;采用这种方法,子窗体可以放到任何父窗体上,只要父窗体响应此消息即可。 示例源码 通过子窗体调用GetParent向父窗体传递参数的示例 GetParent()->SetDlgItemText(IDC_EDIT1,TCHAR *) 通过向父窗体发送消息(sendMessage)来传递参数示例 SendMessage的基本结构如下 SendMessage( HWND hWnd, //消息传递的目标窗口或线程的句柄。 UINT Msg, //消息类别(这里可以是一些系统消息,也可以是自己定义,下文具体介绍,) WPARAM wParam, //参数1 (WPARAM

VC/MFC子窗体向父窗体传递参数的几种方法

♀尐吖头ヾ 提交于 2020-03-01 13:48:41
VC/MFC子窗体向父窗体传递参数的几种方法 典型问题举例 窗体和子窗体均有一个Edit控件和一个按钮,点击父窗体按钮显示子窗体;点击子窗体按钮后,子窗体中Edit控件的值显示在在父窗体中的Edit控件中。 在MFC中实现子窗体向父窗体传递参数的几种方法简述 1、在父窗体定义静态变量 2、传窗体的指针给子窗体 3、子窗体调用GetParent 4、向父窗体sendMessage 方法1,使用静态变量,如果有多个子对象和父对象存在时,处理比较麻烦。 方法2, 传指针给子窗体,子窗体需要另外保存这个指针,此方法可由方法3替代。 方法3, 比方法2优,但与方法2都与父窗体耦合较深。 方法4,推荐采用方法;采用这种方法,子窗体可以放到任何父窗体上,只要父窗体响应此消息即可。 示例源码 通过子窗体调用GetParent向父窗体传递参数的示例 GetParent()->SetDlgItemText(IDC_EDIT1,TCHAR *) 通过向父窗体发送消息(sendMessage)来传递参数示例 SendMessage的基本结构如下 SendMessage( HWND hWnd, //消息传递的目标窗口或线程的句柄。 UINT Msg, //消息类别(这里可以是一些系统消息,也可以是自己定义,下文具体介绍,) WPARAM wParam, //参数1 (WPARAM

Windows的UI线程

折月煮酒 提交于 2020-03-01 11:12:30
在Windows应用程序中,窗体是由一种称为“UI线程(User Interface Thread)”的特殊类型的线程创建的。 首先,UI线程是一种“线程”,所以它具有一个线程应该具有的所有特征,比如有一个线程函数和一个线程ID。 其次,“UI线程”又是“特殊”的,这是因为UI线程的线程函数中会创建一种特殊的对象——窗体,同时,还一并负责创建窗体上的各种控件。 每个UI线程都有一个消息队列,而不是每个窗体一个消息队列! 只有当一个线程调用Win32 API中的GDI(Graphics Device Interface)和User函数时,操作系统才会将其看成是一个UI线程,并为它创建一个消息队列。 需要注意的是, 消息循环是由UI线程的线程函数启动的(如果函数线程 没有实现消息循环函数就不能处理消息,这个概念要牢记。只产生了一个窗口,但是没有消息处理函数,窗口就无法处理消息) ,操作系统不管这件事,它只管为UI线程创建消息队列 。因此,如果某个UI线程的线程函数中没有定义消息循环,那么,它所拥有的窗体是无法正确绘制的。 如果一个线程创建了窗口,拥有GUI资源,那么也称该线程为GUI线程 ,否则就为工作线程。 创建窗口的线程就拥有该窗口 。这种线程拥有关系的概念对窗口有重要的意义:建立窗口的线程必须是为窗口处理所有消息的线程。为了使这个概念更加明确具体,可以想像 一个线程建立了一个窗口

Invoke and BeginInvoke

和自甴很熟 提交于 2020-02-29 17:54:46
在 Invoke 或者 BeginInvoke 的使用中无一例外地使用了委托 Delegate ,至于委托的本质请参考我的另一随笔: 对 .net 事件的看法 。 一、为什么 Control 类提供了 Invoke 和 BeginInvoke 机制? 关于这个问题的最主要的原因已经是 dotnet 程序员众所周知的,我在此费点笔墨再次记录到自己的日志,以便日后提醒一下自己。 1 、 windows 程序消息机制 Windows GUI 程序是基于消息机制的,有个主线程维护着一个消息泵。这个消息泵让 windows 程序生生不息。 Windows GUI 程序的消息循环 Windows 程序有个消息队列,窗体上的所有消息是这个队列里面消息的最主要来源。这里的 while 循环使用了 GetMessage ()这个方法,这是个阻塞方法,也就是队列为空时方法就会被阻塞,从而这个 while 循环停止运动,这避免了一个程序把 cpu 无缘无故地耗尽,让其它程序难以得到响应。当然在某些需要 cpu 最大限度运动的程序里面就可以使用另外的方法,例如某些 3d 游戏或者及时战略游戏中,一般会使用 PeekMessage ()这个方法,它不会被 windows 阻塞,从而保证整个游戏的流畅和比较高的帧速。 这个主线程维护着整个窗体以及上面的子控件。当它得到一个消息,就会调用

Chrome不支持showModalDialog模态对话框和无法返回returnValue的问题

元气小坏坏 提交于 2020-02-29 16:03:09
What?模态对话框失效了? 上个礼拜修改测试一个后台管理项目,在测试与各个浏览器兼容性的时候,发现在chrome浏览器下showModalDialog方法显示的并不是模态对话框,就像新打开一个页面一样,父窗口仍然可以随意获取焦点,并可以打开多个窗体,而且返回值returnValue也无法返回,一直是undefined。这么多问题很令人头疼,下面就各个主流最新版的浏览器进行了一下测试。 浏览器 是否支持 状态 IE9 ○ Firefox13.0 ○ safari5.1 ○ chrome19.0 × 并不是模态对话框,而是open了一个新窗体 Opera12.0 × 什么也发生,连个窗体都不弹 Chrome到底打开的是什么 因为打开的不是模态对话框,而是像open了一个新窗体一样,那只要验证一下子窗体window.opener是否为空就明白了。 <script type="text/javascript"> alert(window.opener); </script> 在chrome中,显示的是一个[object window]对象,而IE则是undefined。现在知道原来chrome将showModalDialog当作window.open来处理了。也就是说我们完全可以用window.opener来操作chrome浏览器下子窗体。这里还发现个很有趣的现象

浅析VS2010反汇编

China☆狼群 提交于 2020-02-29 07:04:36
第一篇 1. 怎样进行反汇编 在调试的环境下,我们能够很方便地通过反汇编窗体查看程序生成的反汇编信息。 例如以下图所看到的。 记得中断程序的运行,不然看不到反汇编的指令 看一个简单的程序及其生成的汇编指令 #include<stdio.h> #include<windows.h> const long Lenth=5060000/5; int main(){ while(true){ for(long i=0;i<Lenth;i++){ ; } Sleep(10); } } 汇编窗体 2. 预备知识 : 函数调用大家都不陌生,调用者向被调用者传递一些參数,然后运行被调用者的代码,最后被调用者向调用者返回结果,还有大家比較熟悉的一句话。就是函数调用是在栈上发生的,那么在计算机内部究竟是怎样实现的呢? 对于程序,编译器会对其分配一段内存。在逻辑上能够分为代码段。数据段,堆,栈 代码段:保存程序文本。指令指针EIP就是指向代码段。可读可运行不可写 数据段:保存初始化的全局变量和静态变量,可读可写不可运行 BSS:未初始化的全局变量和静态变量 堆(Heap):动态分配内存,向地址增大的方向增长。可读可写可运行 栈(Stack):存放局部变量。函数參数,当前状态。函数调用信息等, 向地址减小的方向增长 。很很重要,可读可写可运行 如图所看到的 寄存器 EAX :累加(Accumulator

宿舍管理系统答辩问题总结

帅比萌擦擦* 提交于 2020-02-28 15:49:18
1.第一行using System是什么意思? 答:using system;在C#中指的是命名空间的意思,引入命名空间相当于Java里的import java.util引入包的作用,引入命名空间,你就可以使用其中的变量名和函数。 比如用StringBuilder类,就不用System.Text.StringBuilder builder = new System.Text.StringBuilder()了。 2.namespace以及后面的是什么意思? 答: 命名空间,相当于namespace相当于windows操作系统中的文件夹。“项目名.文件夹名”,用于细分文件。 3.Public与private的区别及功能 答:private是完全私有的,只有在类自己里面可以调用,在类的外部和子类都不能调用,子类也不能继承父类的private的属性和方法。 public对任何类和成员都完全公开,无限制访问。 4.@符号的作用 答:1.忽略转义字符,2.让字符串跨行,3.在标识符中的用法:C#是不允许关键字作为标识符(类名、变量名、方法名、表空间名等)使用的,但如果加上@之后就可以了。 5.解释一下delete方法中报错机制,运行流程 答:1、将预见可能引发异常的代码包含在try语句块中。 2、如果发生了异常,则转入catch的执行。 3、finally可以没有,也可以只有一个

C#Windows Forms窗体、按钮-xdd

我是研究僧i 提交于 2020-02-27 03:20:24
1.更换窗体图标 方法:单击窗体,更改icon属性。 2.调整窗体打开时默认位置 方法:单击窗体,更改StartPotion属性。 3.修改窗体大小 方法:单击窗体,更改Size属性。 4.设置窗体的背景图片 方法:单击窗体,更改BackgroundImage属性。 5.打开新窗体 首先新建一个窗体 然后 Form2 frm2 = new Form2(); frm2.Show(); this.Hide(); 6.单击窗体事件Click 首先在窗体属性事件中双击Click MessageBox.Show("已经单击了窗体");//弹出提示框 7.窗体加载事件Load 例如:窗体在打开时,弹出提示框,询问是否查看窗体 if (MessageBox.Show("是否查看窗体?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) { } 8.窗口关闭事件FormClosing DialogResult dr = MessageBox.Show("是否确定要关闭窗体", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);//创建了一个对话框 if (dr == DialogResult.Yes) { e.Cancel =

初识Windows窗体

痞子三分冷 提交于 2020-02-27 03:17:46
一.创建Windows窗体项目 新建项目-->Visual c#-->Windows-->Windows窗体应用程序 二.运行主窗体 在Program.cs中Main方法写入Application.Run(new 窗体名称); 三.窗体的主要属性 1.Name:窗体的名称,以Frm开头 2.Text:窗体显示的名称,可以为中文 3.icon:窗体的图标 4.BackColor:背景颜色 5.BackGroundImage:背景图像 6.BackGroundImageLayout:背景图像平铺方式 7.StartPosition:窗体启动位置 8.WindowState:窗体启动大小 9.FormBorderStyle:窗体改变大小方式 10.MaximizeBox,MinimizeBox:更改窗体最大化最小化 四.Label标签,前缀为lbl 五.TextBox:文本框,前缀为:txt 主要属性: 1.PasswordChar:密码替换字符 2.MaxLength:最大输入字符长度 3.ReadOnly:不可输入 六.ComboBox:下拉框,前缀为cbo 主要属性: 1.Item:指定每一项的值 2.DropDownStyle:选中一行,不可输入 七.Button:按钮,前缀为:btn 主要属性: 1.Enabled:按钮禁用 2.Visible:显示和隐藏 八.给控件注册事件