C#实现一个类似QQ窗体自动上卷的程序

C#实现一个类似QQ窗体自动上卷的程序
C#实现一个类似QQ窗体自动上卷的程序

C#实现一个类似QQ窗体自动上卷的程序

QQ窗体上滑的效果,主要通过处理鼠标消息实现的。

有三种消息需要处理:

左键弹起:判断窗体的上边,是否在屏幕上边线以上,是则调整窗体的Y坐标为0.

鼠标移出窗体:判断窗体左上角Y坐标是否为0

鼠标进入窗体:判断窗体是否已经上滑,如果已经上滑,需要还原窗体。

移动窗体的时候,计算出Y轴上需要移动的距离,然后分成10次移动,每次间隔50ms,以达到连续移动的效果。代码如下:

using System;

using System.Drawing;

using System.Windows.Forms;

using System.Runtime.InteropServices;

namespace FormHideLikeQQ

{

public partial class QQForm : Form

{

public QQForm()

{

InitializeComponent();

}

///

/// 鼠标弹起时,如果上边缘超过上顶端线。将其移动到顶端线上 ///

///

///

private void QQForm_MouseUp()

{

if (this.Location.Y < 0)

{

MoveForm(new Point(this.Location.X, 0));

}

}

///

/// 如果上边缘在上顶端线上,鼠标离开则上滑窗体

///

///

///

private void QQForm_MouseLeave()

{

if (this.Location.Y == 0)

{

MoveForm(new Point(this.Location.X, 5 - this.Size.Height));

}

}

///

/// 窗体移动函数,有缓慢移动特效。

///

///

private void MoveForm(Point newPos)

{

//500ms内移动完

Point currentPos = this.Location;

double step = (newPos.Y - this.Location.Y) / 10.0;

for (int i = 1; i <= 10; i++)

{

this.Location = new Point(this.Location.X, (int)(currentPos.Y + step * i)); System.Threading.Thread.Sleep(50);

}

}

///

/// 鼠标进入窗体的响应事件

///

private void QQForm_MouseEnter()

{

if (this.Location.Y == (5 - this.Size.Height))

{

MoveForm(new Point(this.Location.X, 0));

}

}

[DllImport("user32")]

public static extern bool TrackMouseEvent(TRACKMOUSEEVENT lpEventTrack);

[StructLayout( LayoutKind.Sequential,CharSet=CharSet.Ansi)]

public struct TRACKMOUSEEVENT {

public long cbSize;

public long dwFlags;

public long hwndTrack;

public long dwHoverTime;

}

private const int WM_MOUSEHOVER = 0x2a1;

private const int WM_MOUSELEAVE = 0x2a3;

private const int WM_MOUSEMOVE = 0x200;

private const int TME_HOVER = 0x1;

private const int WM_LBUTTONUP = 0x202;

private const int WM_LBUTTONDOWN = 0x201;

private const int VK_LBUTTON = 0x01;

///

/// 消息处理函数

///

///

protected override void WndProc(ref Message m)

{

base.WndProc(ref m);

switch (m.Msg)

{

case WM_LBUTTONDOWN:

{

if (m.WParam.ToInt32() == VK_LBUTTON)

{

this._mouseDownPos = GetPointFromLPARAM(m.LParam.ToInt32()); }

}

break;

case WM_LBUTTONUP:

QQForm_MouseUp();

break;

case WM_MOUSELEAVE:

QQForm_MouseLeave();

break;

case WM_MOUSEHOVER:

QQForm_MouseEnter();

break;

case WM_MOUSEMOVE:

{

TRACKMOUSEEVENT msevnt = new TRACKMOUSEEVENT();

msevnt.cbSize = Marshal.SizeOf(typeof(TRACKMOUSEEVENT));

msevnt.dwFlags = TME_HOVER;

msevnt.hwndTrack = (long)this.Handle;

msevnt.dwHoverTime = 300;

if (m.WParam.ToInt32() == VK_LBUTTON)

{

Point newCursor = GetPointFromLPARAM(m.LParam.ToInt32());

this.Location = new Point(this.Location.X + newCursor.X - this._mouseDownPos.X, this.Location.Y + newCursor.Y - this._mouseDownPos.Y);

}

}

break;

default:

break;

}

}

///

/// 获得低16位值

///

///

///

public static int GET_X_LPARAM(int lParam) { return (lParam & 0xffff); }

///

/// 获得高16位值

///

///

///

public static int GET_Y_LPARAM(int lParam) { return (lParam >> 16); } ///

/// 解析出鼠标的新坐标(相对于窗体的坐标)

///

///

///

public static Point GetPointFromLPARAM(int lParam)

{ return new Point(GET_X_LPARAM(lParam), GET_Y_LPARAM(lParam)); }

private Point _mouseDownPos = new Point();

private void button1_Click(object sender, EventArgs e)

{

this.Close();

}

}

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.360docs.net/doc/c99357587.html,bel1 = new https://www.360docs.net/doc/c99357587.html,bel ( ) ; https://www.360docs.net/doc/c99357587.html,bel2 = new https://www.360docs.net/doc/c99357587.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.360docs.net/doc/c99357587.html,ponentModel.ISupportInitialize ) ( this.trackBar1 ) ).BeginInit ( ) ;

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); } 完成了!

vb练习题,电子版 第13章 多窗体程序设计

第十三章多窗体程序设计 教学要求: 了解多重窗体应用程序的适用范围与特点,掌握多重窗体应用程序建立的主要步骤;了解多重窗体程序的执行与保存特点,了解Visual Basic工程的结构特点(标准模块、窗体模块、Sub Main过程);掌握闲置循环与DoEvents语句的用法。 知识点: 多重窗体应用程序;多重窗体应用程序的建立、执行、保存;Visual Basic工程的结构特点;闲置循环与DoEvents语句。 内容导航: 一、建立多重窗体应用程序 (一)多重窗体程序设计有关的语句和方法 1.Load语句。格式:Load 窗体名 2.Unload语句。格式:Unload 窗体名 3.Show方法。格式:[窗体名.]Show[模式] 4.Hide方法。格式:[窗体名.]Hide (二)建立界面 窗体的添加方法有如下4种: 方法一:单击“工程”菜单中的“添加窗体”命令; 方法二:用鼠标右键单击“工程资源管理器”的任何项目,在弹出的快捷菜单中选择“添加”,单击“添加窗体”命令; 方法三:单击工具栏中的“添加窗体”命令; 方法四:通过组合键Alt+P,F。 二、多重窗体程序的执行与保存 (一)指定启动窗体 在缺省情况下,应用程序中的第一个窗体被指定为启动窗体。应用程序开始运行时,此窗体就被显示出来。要改变启动窗体的执行方法如下: 从“工程”菜单中,选取“工程属性”命令,选取“通用”选项卡,在“启动对象”中,选取要作为新启动窗体的窗体,最后单击“确定”按钮。 (二)保存多窗体程序 为了保存多窗体程序,通常需要一下两步: 1.保存模块。 2.保存工程 (三)装入多窗体程序 装入多窗体程序和装入单窗体程序一样,只要打开工程文件,工程中包括的其他文件便会自动装入内存,而不用一一打开。 三、Visual Basic工程结构 Visual Basic工程分为3个层次:工程级(全局)、模块级和过程级,这对变量与类型的定义和使用都是很重要的。

ACCESS如何在窗体间传递参数

ACCESS如何在窗体间传递参数 最简单的方法是使用全局变量传递,简单明了,无需复杂代码,但多窗体情况下无法确定回传对象。 例:有三个窗体FormA; FormB; FormC,都会调用窗体FormD,FormD在计算出值后无法确定回传给哪个窗体。 无需复杂代码,使用Docmd.OpenForm 的 OpenArgs 参数来传递参数,就可很好的解决。发送窗体FormA; FormB; FormC Dim sParameter as String sParameter = https://www.360docs.net/doc/c99357587.html, & ";" & https://www.360docs.net/doc/c99357587.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,

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();

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.360docs.net/doc/c99357587.html,="panya" lstr_paramtotrans.email="panya@https://www.360docs.net/doc/c99357587.html," lstr_paramtotrans.homepage=" https://www.360docs.net/doc/c99357587.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.360docs.net/doc/c99357587.html, ls_geemail = lstr_getparm.email ls_gethomepage = lstr_getparm.homepage … 其中,lstr_declaredstr为用户自定义结构数据类型,是值传送

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#_两个WIN程序窗口间传递参数的方法【转】

方法一: C#中没有了像https://www.360docs.net/doc/c99357587.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!"

C# 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

实验三:VS下基于控件的窗体应用程序设计解析

实验报告成绩 课程名称《.Net程序设计》指导教师实验日期 实验项目名称实验三:VS下基于控件的窗体应用程序设计 一、实验目的和要求 学习掌握windows程序设计的基本方法:①窗体设计使用,了解窗体对象的各项常用属性和方法。并通过这些属性,定制出不同的窗体对象。②掌握常用控件的特点、通过使用控件的常用属性来设置控件的外观及功能,熟悉并掌握利用控件事件编写代码的程序设计方式。学习C#下窗体的菜单栏、工具栏、状态栏的设计方法,完善窗体设计。掌握通过菜单控件实现窗体菜单的多级设计、掌握上下文菜单的设计方法。并通过菜单项的集合属性,深入了解集合的多层概念及使用。掌握工具栏的设计,了解其属性和方法,并通过属性让工具栏项目呈现出不同的外观。 二、主要仪器设备、试剂或材料 微型计算机;Visual Studio 2010语言编译环境 三、实验内容与要求, 1.创建窗体并修改窗体的各项属性,观察窗体的变化 2.在窗体中添加标签控件,按钮控件,编写程序,通过按钮控件的点击事件来改 变标签的显示内容。 3.掌握文本框、日期和事件控件的使用,学习Timer控件的使用(参考课表P173) 4.学习并掌握窗体菜单、上下文菜单控件的设计方法,理解集合中的层次概念 5.学习并掌握工具栏控件的使用方法,设计不同外观的工具栏按钮。 6.掌握常见的对话框控件,编写程序使用打开/保存对话框,并将获取的信息通过 标签显示出来。 四、程序设计思路、运行及及结果分析 1.创建窗体并修改窗体的各项属性,观察窗体的变化

2.在窗体中添加标签控件,按钮控件,编写程序,通过按钮控件的点击事件来改变标签的显示内容。

Matlab多窗口传值问题(GUI)

Matlab多窗口传值问题(GUI) (上传者说明:此文是转载的) 2009-02-05 13:16 %by dynamic % %For more information,see also % %https://www.360docs.net/doc/c99357587.html,——中国最大的数学工具软件联盟论坛 % %https://www.360docs.net/doc/c99357587.html,——专业、优秀和权威的MATLAB技术交流平台 % %Email:matlabsky@https://www.360docs.net/doc/c99357587.html, 1.直接传递 当要在一个matlab中的.m文件打开一个新窗口时候,可以直接传递例如有两个窗口 A.fig/A.m 和 B.fig/B.m 在 A.m中 B(var1) ; 即可传入参数 那么在B中这样获取即可: if length(varargin)==1 some_var= varargin{1}; end 2.通过output属性传回 在A.m中 some_var=B(var1); 也就是 B还需要返回值。 那么在B中就需要设置handles的output值了 function varargout = B_OutputFcn(hObject, eventdata, handles) varargout{1} = some_var_in_figure_B;

3. 几个重要的函数 1.getappdata(h,'Name'); 获取窗口句柄为h中的'Name'变量 2.setappdata(h,'Name',value);设置窗口句柄为h中的'Name'变量为Value 3.isappdata(h,'Name'); 判断h句柄下面有无‘Name’的变量 4.rmappdata(h,'Name');删除h句柄下面‘Name’的变量 5.guidata(h); 获取窗口句柄为h的 handles结构 6.guidata(h,handles); 设置窗口句柄为h的handles结构为handles 7.guihandles(h) 生成handles结构 说明: 关于appdata的几个函数是最基本的,每个figure都可以有几个很多appdata,setappdata(0,'Name',value) 当设置句柄为0时,表示整个Matlab 共享的数据域,任何figure都可以访问。这也可以成为数据传递的另一种方式。 handles是我们在GUI的m文件经常看到的东西,为什么会有guidata呢?那是因为一个figure对象下面可能有很多其他的对象,例如 edit axes slider 等等,为了将这些东西组织起来供用户方便的访问,matlab特地的添加了这个数据结构,它包括改figure所有的控件。你可以直接访问 使用 guihandles(h) 可以生成 hanles结构,它包含 h 中的所有控件,其中h 可以从fig文件load进来。 guidata(h) 返回 matlab默认给这个 figure生成的 handles结构。 guidata(h,handles) 是修改 h (如果是一个figure) 或者 h 的父figure 的handles值。 它会不停的向上查找 h的parent ,直到为figure,然后便修改其handles值。 4.句柄概念 个人认为,句柄就是相当于指针的意思,在Matlab中,每一个GUI对象都有一个handle,他们都是一些小数或者整数,Matlab能够保证这些数字不重复,因此通过这个句柄就可以访问或者修改你的对象。 通过传递句柄的方式可以修改传递的值的内容,而传递变量就做不到,这点和C语言的指针类似。

winForm两个Form窗口之间的传值

首先定义两个Form,一个为Form1,一个为Form2,其中Form1作为父窗口,Form2作为子窗口 1、父窗口传值给子窗口 Form1中代码: public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Form2 lForm = new Form2();//实例化一个Form2窗口 lForm.String1 = "传值给子窗口Form2成功";//设置Form2中string1的值 lForm.SetValue();//设置Form2中Label1的 lForm.ShowDialog(); } Form2中代码: private string string1; public string String1 { set { string1 = value; } } public void SetValue() { https://www.360docs.net/doc/c99357587.html,bel1.Text = string1; } public Form2() { InitializeComponent(); } 2、子窗口返回值给父窗口 Form1中代码:

public Form1() { InitializeComponent(); } private string strValue; public string StrValue { set { strValue = value; } } private void btnShowForm2_Click(object sender, EventArgs e) { Form2 lForm = new Form2(); lForm.Owner = this;//重要的一步,主要是使Form2的Owner指针指向Form1 lForm.ShowDialog(); MessageBox.Show(strValue);//显示返回的值 } From2中代码: public Form2() { InitializeComponent(); } private void btnClose_Click(object sender, EventArgs e) { Form1 lForm1 = (Form1)this.Owner;//把Form2的父窗口指针赋给lForm1 lForm1.StrValue = "子窗口Form2返回数值成功";//使用父窗口指针赋值this.Close(); }

WinForm窗体传值

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";

主窗体向子窗体传递数据

C# 主子对话框数值传递 在C# winform编程中,我们经常会遇到不同窗口间需要传递数值的问题.比如数据库的应用,主窗口填写内容num1,点击按钮,在弹出的子窗口显示对应num1值;或者在子窗口填写新注册用户名信息,在主窗口的dataGridView动态变化显示着新添加\修改的值;或者在修改信息时,输入用户编号”000001”在对应textBox中它的相应数据.显示如下图所示: 以上应用都涉及到如何在两个不同窗口间传递数值,并实现动态的更新,下面就介绍我请教同学学到的一种主子对话框数值传递的知识,仅供大家学习!它是非常基础的C# winform知识,但也是非常有用的知识. 一.建立主子对话框

首先建立一个”Windows窗体应用程序”,然后主窗体Form1的界面如下图,然后添加一个子窗口,右键”解决方案”中项目名称,点击”添加”,新增一个”Windows窗体应用程序”,其中名称为”Form2.cs”界面设计如下图所示: 点击主窗体中的”提交”按钮,填写如下代码就可实现在主窗体中调用子窗体的应用.它是在实例一个”Sub”的子窗体并显示.它的运行结果就是当用户点击"提交"按钮时就会弹出子对话框Form2,这就建立了C#主子对话框之间调用的关系. [csharp]view plaincopy 1.//点击"提交"按钮 2.private void button1_Click(object sender, EventArgs e) 3.{ 4. Form2 Sub = new Form2(); 5. Sub.Show(); //显示子对话框内容 6.} 二.主对话框传值给子对话框 下面需要介绍如何在子对话框中显示主对话框中提交的内容,点击Form2空白处,生成一个Load事件,添加如下代码,它的具体意思是:在子对话框”Form1”中声明主对话框”Form2”,然后在Form2的构造函数中给pall 赋值pall=f1;同时在载入Load事件中把”Form2”子对话框中的textBox1赋值为主对话框中提交的值.

C#,winform,ShowDialog,子窗体向父窗体传值

C#,winform,ShowDialog,子窗体向父窗体传值 调用showdialog方法后,调用代码被暂停执行,等到调用showdialog方法的窗体关系后再继续执行。而且窗体可以返回一个dialogresult值,他描述了窗体关闭的原因,例如OK,Cancel,yes,no等。为了让窗体返回一个dialogresult,必须设置窗体的dialogresult值,或者在窗体的一个按钮上设置dialogresult属性。 例子: 下面是子窗体代码,要求输入phone,然后会返回给父窗体。 using System; using System.Collections.Generic; using https://www.360docs.net/doc/c99357587.html,ponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace WindowsApplication1 { public partial class Phone : Form { public Phone() { InitializeComponent(); btnOK.DialogResult = DialogResult.OK; btnOK.DialogResult = DialogResult.Cancel; } public string PhoneNumber { get { return textBox1.Text; } set { textBox1.Text = value; } } private void Phone_Load(object sender, EventArgs e) { } } } 不包含任何处理按钮单击事件的代码,因为设置了每个按钮的dialogresult属性,所以单击OK或者Cancel按钮后,窗体就消失了。下面的代码显示了父窗体中调用Phone对话框的方法。 using System; using System.Collections.Generic; using https://www.360docs.net/doc/c99357587.html,ponentModel; using System.Data; using System.Drawing;

C#实现窗体与窗体的传值

WinForm窗体间传值的方法 这篇文章主要介绍了WinForm窗体间传值的方法,包括了静态变量、公共变量、共有属性等方式,是非常实用的技巧,需要的朋友可以参考下 本文实例讲述了WinForm窗体间传值的方法。分享给大家供大家参考。具体实现方法如下:窗体间传递数据,无论是父窗体操作子窗体,还是子窗体操作符窗体,有以下几种方式: 1.公共静态变量; 2.使用共有属性; 3.使用委托与事件; 4.通过构造函数把主窗体传递到从窗体中; 一、通过静态变量 特点:传值是双向的,实现简单 实现代码如下: 在一个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赋值,以便其他窗体调用 二、公共变量传值 这种方法就是利用一个公共变量,先把需要的值存放到这个公共变量,然后需要的时候再通过读取该变量的值来使用 例子 Form1: 复制代码代码如下: public static string Form1Value; // 注意,必须申明为static变量 private void button1_Click(object sender, EventArgs e) { Form1Value = "来自Form1"; new Form2().Show(); } Form2:

总结C#中窗体间传递数据的几种方法

总结C#中窗体间传递数据的几种方法(由别人的方法整理) 在编写C#windows应用程序的时候我们经常会遇到这种问题,怎么样在两个窗体间传递数据呢?以下是我整理的网上的各种方法,在遇到一个实际问题:在form1中打开一个form2窗口作为录入界面,将录入的值经转换后在form1中显示。采用了委托的方法,可以实现。(与VC 的回调的应用相似) 1.可以通过委托的方法来解决 问题:通过form1做一个录入界面,将里边通过文本框录入的数值复值给form2中的listview各列,用3个textbox1.text举例吧,分别对应listview的3个列。 可以这么做,如果两个窗体是在同一个命名空间下 定义一个代理,注意这个代理是全局的:(即同一命名空间下,与Form1,Form2平级的)public delegate void MyInvoke(string Item1,string Item2,string Item3); //在窗体From2中有这么一个回调函数,用于在ListView里添加一个新项的: private void UpdateListView(string Item1,string Item2,string Item3) { ListView1.Items.Add(Item1); ListView1.Items[ListView1.Items.Count - 1].SubItems.Add(Item2); ListView1.Items[ListView1.Items.Count - 1].SubItems.Add(Item3); } //比如说点击Form2的一个按钮弹出Form1进行录入,在点击按钮的事件下: //把委托传过去 Form1 frmEdit=new Form1(new MyInvoke(UpdateListView)); frmEdit.ShowDialog(this);

相关文档
最新文档