c#内子窗体如何调用主窗体内的变量?

 我来答
sugarhu
2012-02-01
知道答主
回答量:18
采纳率:100%
帮助的人:20.4万
展开全部
方法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: //最后一种就是把值写入数据库,再读取数据库,比较麻烦

工作这么多年了,像你这个问题问的实在太那个了。程序不是老虎,多动手,你会成功的小伙子,加油
lzh3452
2012-02-01 · TA获得超过1044个赞
知道小有建树答主
回答量:1168
采纳率:100%
帮助的人:864万
展开全部
第一,主窗体内要被取得的变量必须是全局变量,而且是public的。
第二,在主窗体中使用ShowDialog(this)来显示子画面。
第三,在子画面中使用this.owner取得主窗体,注意,这里需要把this.owner强制转换一下类型,例,((WindowForm1)this.owner)。这样就可以点出主画面的变量了。
比如:((WindowForm1)this.owner).str1就可以取得主窗体的str1中所存的内容了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
h120_00
2020-11-04 · TA获得超过1173个赞
知道小有建树答主
回答量:260
采纳率:0%
帮助的人:82.7万
展开全部
(示例,创建一个新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.变量名。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
styshoo1986
2012-02-01 · TA获得超过893个赞
知道小有建树答主
回答量:832
采纳率:100%
帮助的人:266万
展开全部
把主窗体当做变量传进去就可以了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mercury_amy
2012-02-04 · 超过23用户采纳过TA的回答
知道答主
回答量:54
采纳率:0%
帮助的人:59.9万
展开全部
主窗体这个变量定义为static形式才行。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式