C#中如何在两个窗体之间传递一个变量

wangsifan 2004-12-23 11:34:13
我建立了两个窗体form1,form2,在form1中定义了一个公有变量,
我想通过form2改变这个变量的值,我不想通过在窗体加载中添加参数,
怎么用才可以呢?
...全文
287 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
nga96 2004-12-23
  • 打赏
  • 举报
回复
对,变量,属性
epimetheus 2004-12-23
  • 打赏
  • 举报
回复
利用事件。是最好的办法。在子窗体中定义一个事件。子窗体需要传递给父窗体的数据,通过事件传递过去。这样特别灵活。
marvelstack 2004-12-23
  • 打赏
  • 举报
回复
http://blog.csdn.net/zhzuo/archive/2004/04/05/22027.aspx
shuaizhen 2004-12-23
  • 打赏
  • 举报
回复
在form2中定义:
form1 f =new form1;
f.公有变量=需要修改的内容;
这改变的并不是原来窗体的值了。
shuaizhen 2004-12-23
  • 打赏
  • 举报
回复
不行呀。我试过你们说的方法了。
wroxdo 2004-12-23
  • 打赏
  • 举报
回复
同意楼上的做法,但使用的时候要细心些

另外在使用公有变量的时候会破坏类的封装,建议用属性来做
earlsen 2004-12-23
  • 打赏
  • 举报
回复
在form2中定义:
form1 f =new form1;
f.公有变量=需要修改的内容;
vogts 2004-12-23
  • 打赏
  • 举报
回复
.aspx?code=88

request.quering('code')
kong19 2004-12-23
  • 打赏
  • 举报
回复
用静态变量或属性
hefanxinsky 2004-12-23
  • 打赏
  • 举报
回复
还可以使用系统的API函数

将下面两断代码各自编译成Form1.exe和Form2.exe文件 试一试

我也从网上看到的 在此谢过提供此代码的大侠了 呵呵
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;

public class Form1 : System.Windows.Forms.Form {
private System.Windows.Forms.Button button1;
private System.Windows.Forms.TextBox textBox1;

private System.ComponentModel.Container components = null;

[STAThread]
static void Main() {
Application.Run(new Form1());
}

public Form1()
{
InitializeComponent();
}
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows 窗体设计器生成的代码
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.textBox1 = new System.Windows.Forms.TextBox();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(32, 24);
this.button1.Name = "button1";
this.button1.TabIndex = 0;
this.button1.Text = "button1";
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(32, 64);
this.textBox1.Name = "textBox1";
this.textBox1.TabIndex = 1;
this.textBox1.Text = "textBox1";
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(292, 266);
this.Controls.Add(this.textBox1);
this.Controls.Add(this.button1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);

}
#endregion

private void button1_Click(object sender, System.EventArgs e) {
MessageBox.Show("This is button1 click!");
}
}


using System;
using System.Text;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Runtime.InteropServices;

public class TestForm1 : System.Windows.Forms.Form {
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Button button2;

private System.ComponentModel.Container components = null;

[STAThread]
static void Main() {
Application.Run(new TestForm1());
}

public TestForm1()
{
InitializeComponent();
}
protected override void Dispose( bool disposing )
{
if( disposing )
{
if(components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows 窗体设计器生成的代码
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.button2 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(32, 24);
this.button1.Name = "button1";
this.button1.TabIndex = 0;
this.button1.Text = "button1";
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// button2
//
this.button2.Location = new System.Drawing.Point(32, 64);
this.button2.Name = "button2";
this.button2.TabIndex = 0;
this.button2.Text = "button2";
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// TestForm1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(292, 266);
this.Controls.Add(this.button1);
this.Controls.Add(this.button2);
this.Name = "TestForm1";
this.Text = "TestForm1";
this.ResumeLayout(false);

}
#endregion

private void button1_Click(object sender, System.EventArgs e) {
IntPtr hwnd_win ;
IntPtr hwnd_button ;

hwnd_win = FindWindow("WindowsForms10.Window.8.app3","Form1");
hwnd_button = FindWindowEx(hwnd_win ,new IntPtr(0) ,"WindowsForms10.BUTTON.app3","button1");

const int BM_CLICK = 0x00F5;
Message msg = Message.Create(hwnd_button ,BM_CLICK ,new IntPtr(0),new IntPtr(0));
PostMessage(msg.HWnd ,msg.Msg ,msg.WParam ,msg.LParam);
}
private void button2_Click(object sender, System.EventArgs e) {
const int WM_CHAR = 0x0102;
IntPtr hwnd_win ;
IntPtr hwnd_textbox ;

hwnd_win = FindWindow("WindowsForms10.Window.8.app3","Form1");
hwnd_textbox = FindWindowEx(hwnd_win ,new IntPtr(0) ,"WindowsForms10.EDIT.app3","textBox1");

string strtext = "测试aaa";
UnicodeEncoding encode = new UnicodeEncoding();
char[] chars = encode.GetChars(encode.GetBytes(strtext));
Message msg ;
foreach (char c in chars ) {
msg = Message.Create(hwnd_textbox ,WM_CHAR ,new IntPtr(c),new IntPtr(0));
PostMessage(msg.HWnd ,msg.Msg ,msg.WParam ,msg.LParam);
}
}

[DllImport("user32.dll")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

[DllImport("user32.dll")]
public static extern IntPtr FindWindowEx(IntPtr hwndParent,IntPtr hwndChildAfter,string lpszClass,string lpszWindow);

[DllImport("user32.dll",CharSet=CharSet.Unicode)]
public static extern IntPtr PostMessage(IntPtr hwnd,int wMsg,IntPtr wParam,IntPtr lParam);
}
hefanxinsky 2004-12-23
  • 打赏
  • 举报
回复
可以是void Form1_Activated(object sender, EventArgs e)函数

也就是窗体的Activated事件 (当使用代码或者用户被激活窗体时发生)
shuaizhen 2004-12-23
  • 打赏
  • 举报
回复
通过修FROM2的构造函数,并传一个引用类型的参数即可.
我想在关闭FRom2时才修改参数怎么办?
pingnt 2004-12-23
  • 打赏
  • 举报
回复
通过修FROM2的构造函数,并传一个引用类型的参数即可.
silversnowjing 2004-12-23
  • 打赏
  • 举报
回复
在form2中定义:
form1 f =new form1;
f.公有变量=需要修改的内容;
这改变的并不是原来窗体的值了。
  这样可以,我试过了,建议楼主细心一点尝试
sandsboy 2004-12-23
  • 打赏
  • 举报
回复
用静态变量或属性

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧