c#内子窗体如何调用主窗体内的变量?
展开全部
方法1: //同一窗体内,代码如下:
private static int sum;
public int DoSum(int i,int j)
{
return i + j;
}
private void Form1_Load(object sender, EventArgs e)
{
sum = DoSum(10, 100);
textBox1.Text = sum.ToString();
}
方法2: //不同窗体
//传值窗体,比如父窗体
public void Dosth()
{
Form1 cf = new Form1();
DialogResult res = cf.ShowDialog();//这里使用模式对话框可以获取到子窗体中的回应消息
if (res == DialogResult.OK)
{
MessageBox.Show("被传入窗体中输入的值为:" + cf.textBox1.Text);
}
}
//接收窗体
public string userName = string.Empty;
private void btnOK_Click(object sender, EventArgs e)
{
this.userName = textBox1.Text.Trim();
this.DialogResult = DialogResult.OK;
}
方法3: //还有一种方法就是写Model类了,把值传入Model的静态字段并保存,这种方法目前项目中用的最常用的
public clsModel(int sUserID, string sUserName,string sUserPassWord)
{
UserID = sUserID;
UserName = sUserName;
UserPassWord=sUserPassWord;
}
private static int _UserID;
public static int UserID
{
get { return clsModel._UserID; }
set { clsModel._UserID = value; }
}
private static string _UserName;
public static string UserName
{
get { return clsModel._UserName; }
set { clsModel._UserName = value; }
}
private static string _UserPassWord;
public static string UserPassWord
{
get { return clsModel._UserPassWord; }
set { clsModel._UserPassWord = value; }
}
//调用方式
private void btnClose_Click(object sender, EventArgs e)
{
clsModel clsm = new clsModel(-1, "", "");
Application.Exit();
}
//此方法还有另一种一种写法
public class clsSite
{
public clsSite()
{
}
private string _SiteId;
public string SiteId
{
get { return _SiteId; }
set { _SiteId = value; }
}
private string _SiteName;
public string SiteName
{
get { return _SiteName; }
set { _SiteName = value; }
}
private string _SiteUrl;
public string SiteUrl
{
get { return _SiteUrl; }
set { _SiteUrl = value; }
}
private string _Description;
public string Description
{
get { return _Description; }
set { _Description = value; }
}
private string _SpiderStep;
public string SpiderStep
{
get { return _SpiderStep; }
set { _SpiderStep = value; }
}
}
public static class clsStaSite
{
private static string _SiteId;
public static string SiteId
{
get { return clsStaSite._SiteId; }
set { clsStaSite._SiteId = value; }
}
private static string _SiteName;
public static string SiteName
{
get { return clsStaSite._SiteName; }
set { clsStaSite._SiteName = value; }
}
private static string _SiteUrl;
public static string SiteUrl
{
get { return clsStaSite._SiteUrl; }
set { clsStaSite._SiteUrl = value; }
}
private static string _Description;
public static string Description
{
get { return clsStaSite._Description; }
set { clsStaSite._Description = value; }
}
private static string _SpiderStep;
public static string SpiderStep
{
get { return clsStaSite._SpiderStep; }
set { clsStaSite._SpiderStep = value; }
}
}
方法4: //最后一种就是把值写入数据库,再读取数据库,比较麻烦
工作这么多年了,像你这个问题问的实在太那个了。程序不是老虎,多动手,你会成功的小伙子,加油
private static int sum;
public int DoSum(int i,int j)
{
return i + j;
}
private void Form1_Load(object sender, EventArgs e)
{
sum = DoSum(10, 100);
textBox1.Text = sum.ToString();
}
方法2: //不同窗体
//传值窗体,比如父窗体
public void Dosth()
{
Form1 cf = new Form1();
DialogResult res = cf.ShowDialog();//这里使用模式对话框可以获取到子窗体中的回应消息
if (res == DialogResult.OK)
{
MessageBox.Show("被传入窗体中输入的值为:" + cf.textBox1.Text);
}
}
//接收窗体
public string userName = string.Empty;
private void btnOK_Click(object sender, EventArgs e)
{
this.userName = textBox1.Text.Trim();
this.DialogResult = DialogResult.OK;
}
方法3: //还有一种方法就是写Model类了,把值传入Model的静态字段并保存,这种方法目前项目中用的最常用的
public clsModel(int sUserID, string sUserName,string sUserPassWord)
{
UserID = sUserID;
UserName = sUserName;
UserPassWord=sUserPassWord;
}
private static int _UserID;
public static int UserID
{
get { return clsModel._UserID; }
set { clsModel._UserID = value; }
}
private static string _UserName;
public static string UserName
{
get { return clsModel._UserName; }
set { clsModel._UserName = value; }
}
private static string _UserPassWord;
public static string UserPassWord
{
get { return clsModel._UserPassWord; }
set { clsModel._UserPassWord = value; }
}
//调用方式
private void btnClose_Click(object sender, EventArgs e)
{
clsModel clsm = new clsModel(-1, "", "");
Application.Exit();
}
//此方法还有另一种一种写法
public class clsSite
{
public clsSite()
{
}
private string _SiteId;
public string SiteId
{
get { return _SiteId; }
set { _SiteId = value; }
}
private string _SiteName;
public string SiteName
{
get { return _SiteName; }
set { _SiteName = value; }
}
private string _SiteUrl;
public string SiteUrl
{
get { return _SiteUrl; }
set { _SiteUrl = value; }
}
private string _Description;
public string Description
{
get { return _Description; }
set { _Description = value; }
}
private string _SpiderStep;
public string SpiderStep
{
get { return _SpiderStep; }
set { _SpiderStep = value; }
}
}
public static class clsStaSite
{
private static string _SiteId;
public static string SiteId
{
get { return clsStaSite._SiteId; }
set { clsStaSite._SiteId = value; }
}
private static string _SiteName;
public static string SiteName
{
get { return clsStaSite._SiteName; }
set { clsStaSite._SiteName = value; }
}
private static string _SiteUrl;
public static string SiteUrl
{
get { return clsStaSite._SiteUrl; }
set { clsStaSite._SiteUrl = value; }
}
private static string _Description;
public static string Description
{
get { return clsStaSite._Description; }
set { clsStaSite._Description = value; }
}
private static string _SpiderStep;
public static string SpiderStep
{
get { return clsStaSite._SpiderStep; }
set { clsStaSite._SpiderStep = value; }
}
}
方法4: //最后一种就是把值写入数据库,再读取数据库,比较麻烦
工作这么多年了,像你这个问题问的实在太那个了。程序不是老虎,多动手,你会成功的小伙子,加油
展开全部
第一,主窗体内要被取得的变量必须是全局变量,而且是public的。
第二,在主窗体中使用ShowDialog(this)来显示子画面。
第三,在子画面中使用this.owner取得主窗体,注意,这里需要把this.owner强制转换一下类型,例,((WindowForm1)this.owner)。这样就可以点出主画面的变量了。
比如:((WindowForm1)this.owner).str1就可以取得主窗体的str1中所存的内容了。
第二,在主窗体中使用ShowDialog(this)来显示子画面。
第三,在子画面中使用this.owner取得主窗体,注意,这里需要把this.owner强制转换一下类型,例,((WindowForm1)this.owner)。这样就可以点出主画面的变量了。
比如:((WindowForm1)this.owner).str1就可以取得主窗体的str1中所存的内容了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
(示例,创建一个新C#项目,把Form1改名为frmMain,再创建一个frmChild)
新建一个类,名称为Forms,添上static关键字,如下:
public static class Forms {
public static frmMain frmMain = new frmMain();
public static frmChild frmChild = new frmChild();
}
打开已有的Program.cs类,更改这一行:
Application.Run(new frmMain());
改为
Application.Run(Forms.frmMain);
好了。现在如果要在frmMain中访问frmChild的public变量,用:Forms.frmChild.变量名;
同样,在frmChild中访问frmMain的public变量,用:Forms.frmMain.变量名。
新建一个类,名称为Forms,添上static关键字,如下:
public static class Forms {
public static frmMain frmMain = new frmMain();
public static frmChild frmChild = new frmChild();
}
打开已有的Program.cs类,更改这一行:
Application.Run(new frmMain());
改为
Application.Run(Forms.frmMain);
好了。现在如果要在frmMain中访问frmChild的public变量,用:Forms.frmChild.变量名;
同样,在frmChild中访问frmMain的public变量,用:Forms.frmMain.变量名。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把主窗体当做变量传进去就可以了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
主窗体这个变量定义为static形式才行。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询