当前位置:文档之家› WinForm开发,窗体显示和窗体传值相关知识总结

WinForm开发,窗体显示和窗体传值相关知识总结

WinForm开发,窗体显示和窗体传值相关知识总结
WinForm开发,窗体显示和窗体传值相关知识总结

A.WinForm中窗体显示

显示窗体可以有以下2种方法:

Form.ShowDialog方法(窗体显示为模式窗体)

Form.Show方法(窗体显示为无模式窗体)

二者具体区别如下:

1.在调用Form.Show方法后,Show方法后面的代码会立即执行

2.在调用Form.ShowDialog方法后,直到关闭对话框,才执行此方法后面的代码

3.当窗体显示为模式窗体时,单击“关闭”按钮会隐藏窗体,并将DialogResult属性设置为DialogResult.Cancel。与无模式窗体不同,当用户单击对话框的关闭窗体按钮或设置DialogResult属性的值时,不调用窗体的Close方法。实际上是把窗体的Visible 属性赋值为false,隐藏窗体了。这样隐藏的窗体是可以重新显示,而不用创建该对话框的新实例。因为未关闭窗体,所以在应用程序不再需要该窗体时,请调用该窗体的Dispose方法

怎么判断一个窗体是模式窗体呢?

利用Form.Modal属性,如果该窗体是模式显示,则为true,否则为false

根据通过Show和ShowDialog而显示出来的窗体的Modal属性分别对应false和true 特别注意:

由于在窗体创建之前是无法得知显示方式的,所以在窗体构造函数中,Modal属性总是对应false,所以我们只能在Load事件中或者之后利用Modal属性值

怎么确定窗体间的所有者关系?

Form类的Owner属性:窗体的所有者

当一个窗体归另一窗体所有时,它便随着所有者窗体最小化和关闭。

例如,如果Form2归窗体Form1所有,则关闭或最小化Form1时,Form2也会关闭或最小化。

例如在窗体Form1中

Form2 f2 = new Form2 ( );

f2.ShowDialog ( this );

//或者

f2.Show ( this );

//或者

f2.Owner = this;

f2.ShowDialog( );

这样f2的所有者就是Form1

B.WinForm窗体传值

了解了窗体的显示相关知识,接着总结一下窗体的传值方法:

1.通过构造函数

特点:传值是单向的(不可以互相传值),实现简单

实现代码如下:

在窗体Form2中

int value1;

string value2;

public Form2 ( int value1 , string value2 )

{

InitializeComponent ( );

this.value1 = value1;

this.value2 = value2;

}

在窗体Form1中这样调用

new Form2 ( 111 , "222" ).Show ( ); //这样就把111,"222",这2个值传送给了Form2

2.通过静态变量

特点:传值是双向的,实现简单

实现代码如下:

在一个app类中定义一个静态成员value

public class app

{

public static string value;

}

在窗体Form1中这样调用

app.value = "f2"; //给静态成员赋值

new Form2 ( ).Show ( ); //显示Form2

在窗体Form2中

this.Text = app.value; //取回app.value的值

app.value = "Form2"; //给app.value赋值,以便其他窗体调用

3.通过窗体的公有属性值

特点:实现简单

实现代码如下:

在窗体Form2中定义一个公有属性Form2Value,获取和设置textBox1的文本值public string Form2Value

{

get

{

return this.textBox1.Text;

}

set

{

this.textBox1.Text = value;

}

}

在窗体Form1中这样调用

Form2 f2 = new Form2 ( );

f2.Form2Value = "Ok"; //给Form2的textBox1赋值Ok

f2.ShowDialog ( );

4.通过窗体的公有属性值和Owner属性

特点:实现简单,灵活

实现代码如下:

在窗体Form1中

public int Form1Value = 1;

Form2 f2 = new Form2 ( );

f2.ShowDialog ( this ); //把Form1作为Form2的所有者传递给Form2 在窗体Form2中

//Form2的所有者是Form1

Form1 f1 = ( Form1 ) this.Owner;

//取到Form1的值是1

MessageBox.Show ( f1.Form1Value .ToString ( ) );

//给Form1的Form1Value赋值222

f1.Form1Value = 222;

5.通过窗体的公有属性值和Application.OpenForms属性

说明:Application.OpenForms属性,获取属于应用程序的打开窗体的集合。(此属性在 .NET Framework2.0版中)

实现代码如下:

在窗体Form1中

public int Form1Value = 1;

Form2 f2 = new Form2 ( );

f2.Show ( );

在窗体Form2中

string formName = "Form1";

Form fr = Application.OpenForms [ formName ];

if ( fr != null )

{

Form1 f1 = ( Form1 ) fr;

//取到Form1的值是1

MessageBox.Show ( f1.Form1Value.ToString ( ) );

//给Form1的Form1Value赋值222

f1.Form1Value = 222;

}

6.通过事件

在窗体Form2中定义公有属性Form2Value,获取和设置textBox1的文本值,并且还定义一个accept事件

public string Form2Value

{

get

{

return this.textBox1.Text;

}

set

{

this.textBox1.Text = value;

}

}

public event EventHandler accept;

private void button1_Click ( object sender , EventArgs e )

{

if ( accept != null )

{

accept ( this , EventArgs.Empty ); //触发事件,传递自身引用 }

}

在窗体Form1中

Form2 f2 = new Form2 ( );

f2.accept += new EventHandler ( f2_accept );

f2.Show ( );

void f2_accept ( object sender , EventArgs e )

{

//事件的接收者通过一个简单的类型转换得到Form2的引用

Form2 f2 = (Form2) sender;

//接收到Form2的textBox1.Text

this.textBox1.Text = f2.Form2Value;

}

MFC中关闭窗口的几种办法

MFC中关闭窗口的几种办法+MFC中MessageBox的用法MFC中关闭窗口的几种办法: 退出程序用AfxGetMainWnd()->SendMessage(WM_CLOSE); 关闭当前窗口用DestroyWindow( ); 关闭模式对话框用EndDialog(0); MFC中MessageBox的用法 消息框是个很常用的控件,属性比较多,本文列出了它的一些常用方法,及指出了它的一些应用场合。 1. MessageBox("这是一个最简单的消息框!"); 2. MessageBox("这是一个有标题的消息框!","标题"); 3. MessageBox("这是一个确定取消的消息框!","标题", MB_OKCANCEL ); 4. MessageBox("这是一个警告的消息框!","标题", MB_ICONEXCLAMA TION ); 5. MessageBox("这是一个两种属性的消息框!","标题", MB_ICONEXCLAMA TION|MB_OKCANCEL ); 6. if(MessageBox("一种常用的应用","标题",MB_ICONEXCLAMATION|MB_OKCANCEL)==IDCANCEL) return; 附其它常用属性 系统默认图标,可在消息框上显示 X错误MB_ICONHAND, MB_ICONSTOP, and MB_ICONERROR ?询问MB_ICONQUESTION !警告MB_ICONEXCLAMATION and MB_ICONW ARNING i信息MB_ICONASTERISK and MB_ICONINFORMA TION 按钮的形式 MB_OK 默认 MB_OKCANCEL 确定取消 MB_YESNO 是否 MB_YESNOCANCEL 是否取消 返回值 IDCANCEL 取消被选 IDNO 否被选 IDOK 确定被选 IDYES 是被选

C# WinForm自定义控件开发实例

C# WinForm自定义控件开发实例 最近做一个图象的采集,需要一个图形的选择控件,但是在.net下没有类似vb中的shape控件,所以考虑了自己写一个控件。下面我将从头创建控件,这个控件主要是用来选择图形的Rectangle,有一下几个属性Color BorderColor:边框颜色,Color BackColor:背景颜色,bool ReSizeble:是否可移动,Rectangle SelectRectangle:选择区域。 打开vs2003(我用的这个版本),新建一个c#控件库,ok,拷贝如下代码到你的代码里。using System;using System.Collections;using https://www.doczj.com/doc/5012829297.html,ponentModel;using System.Drawing;using System.Data;using System.Windows.Forms;namespace WindowsExtendedControls{ /// /// 控件/// public class ShapeEx : System.Windows.Forms.Control { /// /// 必需的设计器变量。/// /// private Color _BorderColor=new Color(); private Color _BackColor=new Color(); private bool _ReSizeble; private Point _SelfLocation=new Point(); private Point _MouseLocation=new Point(); private int _SelfWidth; private int _SelfHeight; private int _SelectSelctedIndex;//0-8,0:SizeAll private Rectangle

C#窗体间数据传值

C#窗体间数据传值 窗体间数据传递第一种情况的解决方法存在一个主要的缺点,就是窗体间传递的参数数目是固定的,并且类型也是固定的。这是因为,上文中修改了从命名空间System.Windows.Forms 中的Form类派生而得到的Form2类的构造函数,由于构造函数中的参数和类型都是固定的,而主窗体向从窗体传递数据,就是通过构造函数中的参数来实现的,所以就造成了上面的那个缺点。其实在这种方法中还存在一个缺点,就是每一次窗体间的数据传递,就必须构建一个窗体,并且这种数据传递是一次性的。这些缺点对于窗体间传递少量数据,一般不会有太大影响,但如果要传递大量数据,并且要通过主窗体来实时向从窗体传递数据,使用这种方法就勉为其难了。 下面介绍另外一种从主窗体向从窗体传递数据的实现方法,这种方法能够完全解决上面的二个缺点,程序在主窗体中就像操作窗体中加入的组件一样,灵活的操作从窗体。 设计思路 此方法实现二个功能: 其一,主窗体能够实时地向从窗体传送数据,表现为当更改主窗体中的跟踪条(TrackBar)的数值,从窗体中定义的一个Label组件就显示出跟踪条的当前数值; 其二,从窗体能够向主窗体提出数据请求,并且能够获取主窗体中各组件显示的数据。程序表现为,当单击从窗体中的【从Form1中获取数据】按钮,程序能够把主窗体中的二个TextBox 组件显示的内容传递到从窗体,并且通过从窗体中的二个TextBox组件分别显示出来。 第一个功能的实现思路是把从窗体看成是主窗体的一个实例,加入到从窗体中的组件,可以看出是从窗体中定义的一个个变量,由于从窗体中加入的组件的组件缺省定义类型是Private (私有的),所以要想访问这些组件,必须改变为Public(共有的);而第二个功能的实现思路是通过修改Form2的构造函数,构造函数实现功能是通过Form1类的实例(即为主窗体)来创建并初始化Form2类的实例(即为从窗体)。这样对于从窗体来说,主窗体则为其一个实例,从而也就可以向主窗体提出数据请求,当然要把需要访问的各组件定义类型从缺省的Private(私有的)类型修改为Public(共有的)。上述二个功能的实现方法,第二种方法比较复杂,希望各位能够结合后面的具体实现代码来理解。 第二种窗体间的数据传递情况实现步骤 1.首先创建一个Visual C#的项目文件,项目名称为【VC#中不同窗体数据传递方法02】。 2.把Visual Studio .Net的当前窗口切换到【Form1.cs(设计)】窗口,并从【工具箱】中的【Windows窗体】选项卡中拖入下列组件到【Form1.cs(设计)】窗体中,并执行相应操作:·二个TextBox组件,用以输入向Form2窗体传送的数据 ·二个Label组件 ·一个TrackBar组件,名称为trackBar1。 3.把Visual Studio .Net的当前窗口切换到【Form1.cs】窗口,即:Form1.cs的代码编辑窗口。并用下列代码替换替代系统产生的InitializeComponent过程。 private void InitializeComponent ( ) { https://www.doczj.com/doc/5012829297.html,bel1 = new https://www.doczj.com/doc/5012829297.html,bel ( ) ; https://www.doczj.com/doc/5012829297.html,bel2 = new https://www.doczj.com/doc/5012829297.html,bel ( ) ; this.textBox1 = new System.Windows.Forms.TextBox ( ) ; this.textBox2 = new System.Windows.Forms.TextBox ( ) ; this.trackBar1 = new System.Windows.Forms.TrackBar ( ) ; ( (https://www.doczj.com/doc/5012829297.html,ponentModel.ISupportInitialize ) ( this.trackBar1 ) ).BeginInit ( ) ;

窗体的关闭事件

窗体的关闭事件 对于关注对Windows 窗体应用程序中引发的每个事件按次序进行处理的开发人员来说,事件引发的顺序特别重要。 当Windows 窗体应用程序启动时,主窗体的启动事件按以下顺序引发 1、System.Windows.Forms.Control.HandleCreated在为控件创建句柄时发生。 2、System.Windows.Forms.Control.BindingContextChanged 当BindingContext 属性的值更改时发生。注:每个Windows 窗体至少有一个BindingContext 对象,详见MSDN。 3、System.Windows.Forms.Form.Load 在第一次显示窗体前发生。 4、System.Windows.Forms.Control.VisibleChanged 在Visible 属性值更改时发生。注:如果通过编程修改或用户交互更改Visible 属性,则将引发此事件。 5、System.Windows.Forms.Form.Activated 当使用代码激活或用户激活窗体时发生。 6、System.Windows.Forms.Form.Shown 只有在首次显示窗体时才会引发Shown 事件;随后执行的最小化、最大化、还原、隐藏、显 示或无效化和重新绘制操作都不会引发该事件。 当应用程序关闭时,主窗体的关闭事件按以下顺序引发: 1、System.Windows.Forms.Form.Closing 在关闭窗体时发生。注意:在.NET Framework 版本 2.0 中,Closing 事件已过时,应改用 FormClosing 事件。 2、System.Windows.Forms.Form.FormClosing 在关闭窗体前发生,此时可以取消窗体的关闭。 3、System.Windows.Forms.Form.Closed 关闭窗体后发生。注意:在.NET Framework 版本 2.0 中,Closed 事件已过时,应改用 FormClosed 事件。 4、System.Windows.Forms.Form.FormClosed 关闭窗体后发生。 5、System.Windows.Forms.Form.Deactivate 当窗体失去焦点并不再是活动窗体时发生。 注意:当调用Application.Exit 方法以退出应用程序时,不引发Form.Closed 和Form.Closing 事件,但是会激发Form.FormClosed 和Form.FormClosing 事件。 FormClosing :在窗体关闭时,FormClosing 事件发生。窗体关闭时,此事件会得到处理,从而释放与此窗体关联的所有资源。如果取消此事件,则该窗体保持打开状态。若要取消窗体的关闭操作,请将传递给事件处理程序的FormClosingEventArgs 的Cancel 属性设置为true。 FormClosed:在用户或Application 类的Close 方法或Exit 方法关闭窗体后,会发生FormClosed 事件。 若要防止窗体关闭,请处理FormClosing 事件,并将传递给事件处理程序的CancelEventArgs 的Cancel 属性设置为true。可以使用此事件执行一些任务,如释放窗体使用的资源,还可使用此事件保存输入窗体中的信息或更新其父窗体。当窗体显示为模式对话框时,单击“关闭”按钮(窗体右上角带X 的按钮)会隐藏窗体并将DialogResult 属性设置为DialogResult.Cancel。通过在窗体的FormClosing 事件的事件处理程序中设置DialogResult 属性,可以在用户单击“关闭”按钮时重写分配给DialogResult 属性的值。 如果窗体是多文档界面(MDI) 父窗体,则在引发MDI 父窗体的FormClosing 事件之前将引发所有MDI 子窗体的FormClosing 事件。同样,在引发MDI 父窗体的FormClosed 事件之前,将引发所有MDI 子窗体的FormClosed 事件。取消MDI 子窗体的FormClosing 事件不能防止引发MDI 父窗体的FormClosing 事件。但是,取消该事件会将作为参数传递给父窗体的FormClosingEventArgs 类的Cancel 属性设置成false。要强制关闭所有MDI 父窗体和子窗体,请将MDI 父

C#开发WinForm如何在两个窗体之间传递参数

通过A窗体打开B窗体,然后将参数从A窗体传递到B窗体: 1、通过构造函数实现 (1)编写Class B的构造函数: public B(string canhu) { InitializeComponent(); textBox1.Text = canhu; } (2)在Class A中初始化Class B并进行赋值: private void button1_Click(object sender, EventArgs e) { B b = new B(textBox1.Text); b.ShowDialog(this); } (3)在Class B完成按钮事件: private void button1_Click(object sender, EventArgs e) { MessageBox.Show(textBox1.Text); } 2、通过全局变量实现 (1)在Class B中设置全局变量: public string passText { get { return textBox1.Text; } set { textBox1.Text = value; } } (2)在Class A初始化Class B的时候设置Class B的公有属性: private void button1_Click(object sender, EventArgs e) { B b = new B(); b.passText = textBox1.Text; b.ShowDialog(this); }

通过A窗体打开B窗体,然后将参数从A窗体传递到B窗体,之后在窗口B完成相应操作后将参数返还给A: 这种情况可以通过事件完成: (1)在Class B中设置全局变量: public string Form2Value { get { return this.textBox1.Text; } set { this.textBox1.Text = value; } } (2)在Class B中设置事件: public event EventHandler accept; (3)在Class A中编写如下的函数: void b_accept(object sender, EventArgs e) { //事件的接收者通过一个简单的类型转换得到Form2的引用 B b = (B)sender; //接收到Form2的textBox1.Text this.textBox1.Text = b.Form2Value; } (4)在Class A的按钮事件中完成如下的操作: private void button1_Click(object sender, EventArgs e) { B b = new B(); b.Form2Value = this.textBox1.Text; b.accept += new EventHandler(b_accept); b.ShowDialog(this); } 完成了!

ACCESS如何在窗体间传递参数

ACCESS如何在窗体间传递参数 最简单的方法是使用全局变量传递,简单明了,无需复杂代码,但多窗体情况下无法确定回传对象。 例:有三个窗体FormA; FormB; FormC,都会调用窗体FormD,FormD在计算出值后无法确定回传给哪个窗体。 无需复杂代码,使用Docmd.OpenForm 的 OpenArgs 参数来传递参数,就可很好的解决。发送窗体FormA; FormB; FormC Dim sParameter as String sParameter = https://www.doczj.com/doc/5012829297.html, & ";" & https://www.doczj.com/doc/5012829297.html, & ";" DoCmd.OpenForm "FormD", acForm, , , , , sParameter 接收窗体FormD - 接收 Private Sub Form_Load() Dim sParameterA() As String sParameterA = Split(Me.OpenArgs, ";") ControlName.V alue = Forms(sParameterA(0)).Controls(sParameterA(1)).V alue End Sub 接收窗体FormD - 回传 Private Sub Form_Close() Dim sParameterA() As String sParameterA = Split(Me.OpenArgs, ";") Forms(sParameterA(0)).Controls(sParameterA(1)).V alue = ControlName.V alue End Sub 该方法代码简单、回传明确、便于窗体的重复调用。 在实际开发应用中,经常需要在窗体间传递参数。常用的几种参数传递方法有如下几种: 1。使用openargs 在调用的窗体使用如下语句: doc 在实际开发应用中,经常需要在窗体间传递参数。常用的几种参数传递方法有 如下几种: 1。使用openargs 在调用的窗体使用如下语句: docmd.openform "被调用的窗体",,,,,, "参数值" 在被调用的窗体使用me.openargs即可获取传递过来的参数 2。使用全局变量 先设置一个全局变量,例如:gstrPara,

Excel VBA编程 窗体的事件

Excel VBA 编程 窗体的事件 事件是指在应用程序运行期间,在窗体(或其内的对象)上,由于用户的操作或系统内自身原因而产生的有效动作,例如单击鼠标(Click )、移动鼠标(MouseMove )等都是事件。 VBE 中的对象可识别的事件是预先确定的,并不是所有对象都会具有相同事件。但每个事件都有一个事件过程的框架与之对应,当某一事件发生时,系统将立即执行对应的事件过程,因此,如果想利用这个过程去完成指定的任务,那么用户就必须在这个对应的事件过程中编写程序代码,以便响应发生的事件,否则,即使发生了可识别的事件,系统也不会做任何操作。下面介绍用户窗体中的一些常用事件。 1.Initialize 事件 Initialize 事件用来提供应用程序或用户窗体中的控件、变量等进行初始化。该事件的作用,于类模块中的该事件相同。 2.QueryClose 事件 该事件发生在UserForm 关闭之前。通常用这个事件确保在关闭应用程序之前,应用程序包含的用户窗体中没有未完成的任务。该事件的语法格式如下: 格式:Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) 该事件括号内有两个参数。其中,参数Cancel 是一个整数的值,用于指定是否在所有加载的用户窗体中停止QueryClose 事件,当Cancel 的值设置为0以外的任意值时,QueryClose 事件将停止执行,并防止关闭UserForm 与应用程序;参数CloseMode 为一个值或常数,用来指示引起QueryClose 事件的原因。 CloseMode 参数返回下列的值,如表12-4所示。 表12.4 CloseMode 参数的返回值 3.Te rmina te 事 件 该事件用于删除窗体中对象事例的所有引用。Terminate 事件发生在卸载窗体对象之后。如果应用程序为非正常退出,从而导致在内存中删除UserForm 的示例,将不会触发Terminate 事件。例如,在从内存中删除UserForm 之前,应用程序调用了End 语句,则UserForm 不会触发Terminate 事件。 4.Activate 和Deactivate 事件 当运行中的对象变成活动窗口的时候就会发生Activate 事件。而当对象不再是活动窗口时,则会发生Deactivate 事件。下面的情况会引发这两种事件: 提 示 “常数”是执行程序时保持常数值的命名项目。常数可以是字符串、数值、另一常 数、任何(除乘幂与Is 之外的)算术运算符或逻辑运算符的组合。每个主应用程序皆可定义自己的一组常数。用户也可以使用Const 语句定义附加常数。可在代码中的任何地方使用常数代替实际的值。

C#Winform窗体间的数据传递

C# Winform 间的数据交互 除使用全局变量外记录几个其他的方法。 1、修改子窗体的构造函数: 简单地说就是通过修改子窗体Form的构造函数,如下所示: public Frm_Child(string Para1, ArrayList List1, TextBox textBox1, Form. Frm_Main) { InitializeComponent(); } 上面的例子中,为子窗体Frm_Child添加了4个参数,分别是:字符串Para1,字符数组List1,文本控件textBox1和父窗体Frm_Main,下面简单区分一下它们各自的特点: <1> 字符串:单向的值传递,在子窗体中不能通过修改此参数的值来间接改变父窗体中的数据。 <2> 字符数组:引用型传递,可以通过将父子窗体中不同的成员变量指向相同的数组,即可实现变更一方,同时更新对方的数据。 <3> 控件:引用型传递,可以通过修改该控件的数据来直接达到控制父窗体中该控件数据的目的。 <4> 窗体:这个最直接,直接将父窗体传递到子窗体中,我们可以方便地在子窗体中修改父窗体中所有授权为public 的数据。 2、给窗体添加属性或方法: 获取或设置拥有此窗体的窗体。若要使某窗体归另一个窗体所有,请为其Owner 属性分配一个对将成为所有者的窗体的引用。当一个窗体归另一窗体所有时,它便随着所有者窗体最小化和关闭。例如,如果Frm_Child 归窗体Frm_Main所有,则关闭或最小化Frm_Main 时,也会关闭或最小化Frm_Child。并且附属窗体从不显示在其所有者窗体后面。可以将附属窗体用于查找和替换窗口之类的窗口,当选定所有者窗体时,这些窗口不应消失。若要确定某父窗体拥有的窗体,请使用OwnedForms属性。 我们可以通过下面的方式来确定这种从属的窗体关系: Frm_Child form. = new Frm_Child(); form.Owner = this; form.ShowDialog();

窗体组件(TForm)的事件

窗体组件(TForm)的事件窗体组件最重要的一些事件主要是在窗体创建和关闭时产生的事件。在创建窗体时,将会依次发生下列事件:OnCreate;OnShow;OnActivate;OnPaint。 1.OnCreate事件 在创建窗体时会产生这一事件。主窗体的这一事件经常用于对程序作一些初始化,如分配内存、为一些变量设置初始值等。 2.OnShow事件 窗体显示时(即是窗体的V isible属性被设为True时)会产生这一事件。 3.OnActivate事件 当窗体变为活动窗体时,会产生这一事件。下面的代码表示当窗体Forml为活动窗体时,其标题(Caption)变为“活动窗体”: VOid fastcall TForml::FormActivate(TObject Sender) { Caption=”活动窗体”; ) 4.OnPaint事件 当窗体重画时发生这一事件,利用OnPaint事件加代码可以进行重画窗体时的特殊处理,例如在窗体尺寸变更时需要重画窗体,就会产生这一事件。 5.OnClick事件 当鼠标在窗体上单击的时候发生该事件。 6.OnClick事件 当鼠标在窗体上单击的时候发生该事件。 7.OnClose事件 当关闭窗体的时候发生该事件,利用在OnClose事件加代码可以进行关闭窗体时的特殊处理。该事件有一个TcloseAction类型的Action参数。 8.OnCloseQuery事件 用OnCloseQuery可以指定窗体关闭的条件。 9.OnDestroy事件

当窗体被删除时发生这一事件,利用在OnDestroy事件加代码可以进行删除窗体时的特殊处理。 10.OnHelp事件 当窗体收到请求帮助时发生这一事件。 11.OnHide事件 当窗体被隐藏时(窗体的V isible属性设置为False时)发生收到请求帮助时发生这一事件。 12.OnResize事件 当窗体改变大小的时候发生这一事件,利用在OnResize事件加代码可以进行改变窗体大小的时候做特殊处理。

常用窗体控件

常用窗体控件: String str=””; Foreach(Control item in this.Controls) { If(https://www.doczj.com/doc/5012829297.html,.IndexOf(“checkBox”)>0) { CheckBox ck=(CheckBox)Item; If(ck.Checked) { Str=ck.Text+”,”; } } }

高级窗体控件: 1.菜单控件MenuStrip 使用步骤: ①在Windows窗体中添加一个MenuStrip控件 ②单击该控件的Items属性,弹出“项集合编辑器”对话框 ③可以添加MenuItem子项。子项的子菜单 选择其“MenuItem”选项,单击其 DropDownItems属性,弹出相接对话框 ①选中要添加右键功能的Form或者控件,打开控件的设计页面 ②从工具箱中找到ContextMenuStrip控件,将这个控件拖曳到Form或者控件的设计页 面上。这时系统就会在这个页面下面自动创建一个contextMenuStrip1控件,如果你想在这个页面添加多个菜单,那么你也可以拖曳多个这种控件到设计页面上。 ③按照你的要求将这些ContextMenuStrip控件改成你需要的名称。然后, 选择需要右 键弹出菜单的页面,比如你当前编辑的页面中有一个DataGrid,一个T reeList,而你想分别为这两个控件添加不同的右键菜单。那么你就可以先选择DataGrid控件,然后在这个控件的属性中找到ContextMenuStrip属性,点击该属性,系统会自动查找你拖曳到当前页面的所有ContextMenuStrip控件并将这些控件罗列在这个属性的下拉菜单中。你可以选择一个你预先定义好的ContextMenuStrip控件。这样就为这个DataGrid控件设置了右键菜单。其他控件也使用同样的方法添加。 ④定义你的菜单,在为控件分配完菜单之后,你就可以定义单个的菜单。这时你可以 选中一个ContextMenu控件。系统会自动在编辑页面的上面现一个可编辑的动态菜

PB窗口之间传递多参数的方法:

PB窗口之间传递多参数的方法: 在PowerBuilder中函数OpenWithParm,CloseWithReturn,OpenSheetWithParm,windowname.OpenUserObjectWithParm等都有一个在进行窗口操作(打开或者关闭)时存入Message消息对象的参数parameter或returnvalue。 消息对象Message有三个属性用于存储这些函数传递给窗口的数据(依赖于窗口操作时参数赋予的类型)。根据parameter / returnvalue参数数据类型的不同,该参数的值保存在Message对象的不同属性中。parameter / returnvalue参数的类型与使用的Message对象属性的对应关系如下表: 参数类型Message对象属性 Numeric(数值) Message.DoubleParm PowerObject(PB对象,包括用户自定义的结构数据类型) Message.PowerObjectParm String(字符串) Message.StringParm 应用程序根据OpenWithParm()等函数的parameter / returnvalue参数类型,从Message 消息对象的不同属性中提取该函数并传送给被打开窗口的值。 在PB中如果是传递一个参数,是很容易实现的。在调用脚本中,可以使用如下代码:openwithparm(w_wantparm,parmtotrans) 接着在打开窗口w_wantparm的open事件中键入: string ls_getparm ls_getparm=message.stringparm … 如果需要传递多个参数,可以使用如下两种方法: 方法一 定义结构变量:lstr_declaredstr,其中包含你想传递的各种参数: 变量名变量类型 ID Unsignedlong Name Character Email Character Homepage Character …… 在调用脚本中,使用如下代码: lstr_declaredstr lstr_parmtotrans lstr_parmtotrans.id=1 lstr_https://www.doczj.com/doc/5012829297.html,="panya" lstr_paramtotrans.email="panya@https://www.doczj.com/doc/5012829297.html," lstr_paramtotrans.homepage=" https://www.doczj.com/doc/5012829297.html,"; … openwithparm(w_wantparm,parmtotrans) 接下来在打开窗口w_wantparm的open事件中,获取结构信息: lstr_declaredstr lstr_getparm integer li_getid string ls_getname string ls_getemail string ls_gethomepage lstr_getparm = message.powerobjectparm li_getid = lstr_getparm.id ls_getname = lstr_https://www.doczj.com/doc/5012829297.html, ls_geemail = lstr_getparm.email ls_gethomepage = lstr_getparm.homepage … 其中,lstr_declaredstr为用户自定义结构数据类型,是值传送

C# WinForm窗体及其控件的自适应

C# WinForm窗体及其控件的自适应 C# WinForm窗体及其控件自适应各种屏幕分辨率 一。说明 我们自己编写程序的界面,会遇到各种屏幕分辨率,只有自适应才能显的美观。实际上,做到这点也很简单,就是首先记录窗体和它上面控件的初始位置和大小,当窗体改变比例时,其控件的位置和大小也按此比例变化即可。因为窗体上控件的位置和大小是相对于自己所在的窗体的,也就是所谓的窗口坐标。 在这里我们只考虑相对于自己窗体的窗口坐标更简单,也就是成比例变化。为了多个窗体共用,我在这里创建一个类AutoSizeFormClass ,1.使用它去记录窗体和其控件的初始位置和大小,2.根据窗体变化了的大小,成比例地实现其控件的水平和垂直方向的变化,也就是自适应。 二。使用方法 使用方法很简单, 1.把自适应的类整体复制到你的工程命名空间里, 然后在需要自适应的窗体中做3步即可: 2.声明自适应类实例。 3.为窗体添加Load事件,并在其方法Form1_Load中,调用类的初始化方法,记录窗体和其控件初始位置和大小 4.为窗体添加SizeChanged事件,并在其方法Form1_SizeChanged中,调用类的自适应方法,完成自适应 三。完整代码如下: (一)。自适应窗体的代码: using System; using System.Collections.Generic;

using https://www.doczj.com/doc/5012829297.html,ponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace WindowsApplication1 { public partial class Form1 : Form { //1.声明自适应类实例 AutoSizeFormClass asc = new AutoSizeFormClass(); public Form1() { InitializeComponent(); } //2. 为窗体添加Load事件,并在其方法Form1_Load中,调用类的初始化方法,记录窗体和其控件的初始位置和大小 private void Form1_Load(object sender, EventArgs e) { asc.controllInitializeSize(this); } //3.为窗体添加SizeChanged事件,并在其方法Form1_SizeChanged中,调用类的自适应方法,完成自适应 private void Form1_SizeChanged(object sender, EventArgs e) { asc.controlAutoSize(this); } } }

c#开发中多窗体传值问题

在主窗体Panel中添加新的窗体(C#,winform开发) 设置收藏 文的要写的是如何将窗体(Form)添加到panel中。 为什么要这样呢? 1)如果用tab控件,整个窗体的控件太多,不易于我们编程; 2)可以更灵活的控制窗体的布局。 我想你一定看过这样的配制信息窗体吧(迅雷的配置页面)。 在你的项目开发中,是否也希望做出这种效果呢? 应该如何设置呢? 单击窗体的左边的按钮,窗体右边的内容会根据单击的按钮变化. 开始是想到的设置思路很简单,主窗体(如上图),右边放置一个Panel控件. 然后根据单击的按钮将子窗体显示在Panel控件上. 在按钮的单击事件中加入下面的代码: 在按钮的单击事件中加入下面的代码: private void button1_Click(object sender, EventArgs e) { ChildForm child = new ChildForm(); this.panel1.Controls.Add(child); child.Show(); } 运行程序

显示“不能将顶级控件添加到一个控件上”出现“不能将顶级控件添加到一个控件上”错误 怎么处理? 在代码中加入 child.TopLevel = false; OK. 新问题又出现了.我们不希望子窗体的标题和边筐也显示在父窗体中,再添加如下代码. child.FormBorderStyle = FormBorderStyle.None; 现在的感觉是不是舒服多了. 但是还隐藏着一个新问题.怎样动态设置子窗体的Size、Location等呢? 我希望在调整父窗体大小时,Panel1 中子窗体的大小也跟随动态自动调整 . 需要加入下面的事件 private void panel1_Resize(object sender, System.EventArgs e) { try { this.child.ClientSize = new System.Drawing.Size(panel1.Size.Width, panel1.Size.Height); } catch(System.Exception Er) { MessageBox.Show(Er.ToString()); } }

C#WinForm窗体事件执行次序(较完整版)

C#WinForm窗体事件执行次序(较完整版) 一、以下是网络上可搜索到的次序 当Windows Form 应用程序启动时,会以下列顺序引发主要表单的启动事件: System.Windows.Forms.Control.HandleCreated System.Windows.Forms.Control.BindingContextChanged System.Windows.Forms.Form.Load System.Windows.Forms.Control.VisibleChanged System.Windows.Forms.Form.Activated System.Windows.Forms.Form.Shown 当应用程序关闭时,会以下列顺序引发主要表单的关闭事件: System.Windows.Forms.Form.Closing System.Windows.Forms.Form.FormClosing System.Windows.Forms.Form.Closed System.Windows.Forms.Form.FormClosed System.Windows.Forms.Form.Deactivate 二、以下是我测试的次序,全部protected override 这些事件,并且在其base.的前后分别处理一次,如下 view sourceprint? 1protected override void OnLoad(EventArgs e) 2{ 3 textBox1.Text += "OnLoad1"+ "\r\n"; 4 base.OnLoad(e); 5 textBox1.Text += "OnLoad2"+ "\r\n"; 6} OnClientSizeChanged1 OnClientSizeChanged2 OnClientSizeChanged1 OnClientSizeChanged2 // Loyout要多次执行 OnLayout1 OnLayout2 OnHanleCreated1 OnHanleCreated2 OnInvalidated1 OnInvalidated2 // 注意这里的一点点变化 OnCreateControl1

winform窗体和控件自适应

有时winform窗体的大小会改变,此时窗体上的控件会很混乱,如何可以使控件自适应窗体呢?以 下就是方法: 1、首先在自己的命名空间里先建一个Autosize.cs类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; namespace 自己的命名空间 { class Autosize { public void setTag(Control cons) { foreach (Control con in cons.Controls) { con.Tag = con.Width + ":" + con.Height + ":" + con.Left + ":" + con.Top + ":" + con.Font.Size; if (con.Controls.Count > 0) setTag(con); } } string[] mytag; public void setControls(float newx, float newy, Control cons) { foreach (Control con in cons.Controls) { if (con.Tag != null) { mytag = con.Tag.ToString().Split(new char[] { ':' }); float a = Convert.ToSingle(mytag[0]) * newx; con.Width = (int)a; a = Convert.ToSingle(mytag[1]) * newy; con.Height = (int)(a); a = Convert.ToSingle(mytag[2]) * newx; con.Left = (int)(a); a = Convert.ToSingle(mytag[3]) * newy; con.Top = (int)(a); Single currentSize = Convert.ToSingle(mytag[4]) * Math.Min(newx, newy); }

c#_两个WIN程序窗口间传递参数的方法【转】

方法一: C#中没有了像https://www.doczj.com/doc/5012829297.html,中的全局变量,那么我们如何实现在不同的页面间传递参数呢? 下面举例说明如何实现这一功能. 1.新建一个项目. 2.在该工程中添加一个窗体Form1. 3.在该窗体中定义静态型字符串变量myTestStr1: public static string myTestStr1=""; 4.在该窗体的构造函数中对该变量进行赋值,并为该窗体类添加属性GetStrValue. public Form_Form1() { InitializeComponent(); myTestStr1="Hello!"; } public string GetStrValue { get { return myTestStr1; } set { myTestStr1=value; } } 5.在该工程中另添加一个窗体Form2. 6.在Form1窗体上添加一个button按钮(name:but_Test); 7.在Form1窗体的but_Test_Click 事件中添加以下代码: private void but_Test_Click(object sender, System.EventArgs e) { Form2 frm1=new Form2(); frm1.ShowDialog(this) ; frm1.Close(); } 8.在Form2窗体上添加一个button按钮(name:but_Yes); 9.在Form1窗体的but_Yes_Click 事件中添加以下代码: private void but_Yes_Click(object sender, System.EventArgs e) { MessageBox.Show (Form_Form1.myTestStr1 ); //直接访问. 显示.结果:" Hello!"

窗体报表操作题答案

窗体报表操作题答案 IMB standardization office【IMB 5AB- IMBK 08- IMB 2C】

第5章窗体 窗体1-5:2、4、10、16、71窗体6-10:2、3、18、32、35 窗体11-15:47、53、56、59、62窗体16-20:70、72、107、109、130 Access窗体操作题 代码中常用的属性:标题Caption;前景色foreColor;是否可用Enabled;记录源RecordSource 4、 (5)设置命令按钮bTest的单击事件属性为给定的宏对象m1; 本题直接选择事件,运行宏m1 如果要求写入运行宏的代码就为:“宏名称” 即:“m1” 35、 (5)设置所建命令按钮bC的单击事件,使用户单击该命令按钮后,CDID标签的显示颜色改为红色。要求用VBA代码实现。 属性设置为:对象名.属性名=值 窗体为:form.属性名=值如:=time()也可以:=time() 本题是将CDID文本框所带标签改变颜色:CDID_标签.forecolor=vbred或CDID_标 签.forecolor=rgb(255,0,0) 53、(1)将窗体"fEmp"上文本框"tSS"更改为组合框类型,保持控件名称不变。设置其相关属性实现下拉列表形式输入性别"男"和"女"; 选择文本框右键,选择更改为组合框,在属性窗口设置属性行来源:男;女(不要选择控件来源),行来源类型:值列表。 (2)修改查询对象"qEmp"为参数查询,参数为引用窗体对象"fEmp"上文本框"tSS"的输入值; 在查询qemp的设计视图下:添加性别字段,在条件行输入:[forms]![femp]![tss]。注意:性别不显示。 (3)设置窗体对象"fEmp"上文本框"tPa"为计算控件。要求依据"党员否"字段值显示内容:"党员否"字段值为True,显示"党员"两字;"党员否"字段值为False,显示"非党员"三字; =iif([党员否]=true,”党员”,”非党员”) (4)单击"刷新"按钮(名为"bt1"),事件过程动态设置窗体记录源为查询对象"qEmp",实现窗体数据按性别条件动态显示;单击"退出"按钮(名为"bt2"),关闭窗体。 =”qemp” 56、(5)在窗体中有一个"显示全部记录"命令按钮(名称为bList),单击该按钮后,应实现将"tStudent"表中的全部记录显示出来的功能。现已编写了部分VBA代码,请按照VBA代码中的指示将代码补充完整。 Select*fromtstudent可以参考这条语句上面的语句。 59、(5)在窗体中有一个"退出"命令按钮(名称为bQuit),单击该按钮后,应关闭"fStudent"窗体。现已编写了部分VBA代码,请按照VBA代码中的指示将代码补充完整。 62、(5)在窗体中还有"修改"和"保存"两个命令按钮,名称分别为"CmdEdit"和"CmdSave",其中"保存"命令按钮在初始状态为不可用,当单击"修改"按钮后,应使"保存"按钮变为可用。现已编写了部分VBA代码,请按照VBA代码中的指示将代码补充完整。 =true 70、(1)将窗体"fEmp"上文本框"tSS"更改为组合框类型,并保持控件名称不变;

相关主题
文本预览
相关文档 最新文档