c# 怎样定义整个程序每个窗口都可以访问的变量?

有个主窗口A,另外一个窗口B,B在操作时将一些信息反馈给窗口A,要怎样做?定义项目级的全局变量写在哪里??使用的时候怎样用?如果是定义静态变量的话是不是意味着程序运行中就... 有个主窗口A,另外一个窗口B,B在操作时将一些信息反馈给窗口A,要怎样做?
定义项目级的全局变量写在哪里??使用的时候怎样用?

如果是定义静态变量的话是不是意味着程序运行中就不能修改了?

我试过,在主窗口A中定义了B窗口,值只能从A传给B,反过来就不行了,我唯一想到的解决办法就是像VB那样使用全局变量了.
各位高手还有没有其他办法?
展开
 我来答
宣义坊的大蚂蚁
2008-11-17 · TA获得超过2830个赞
知道大有可为答主
回答量:1617
采纳率:90%
帮助的人:878万
展开全部
1. 你说的“每个窗口都可以访问的变量”是指全局变量,在C#中是靠静态类的静态域来实现的,比如定义以下的类:
public class MyContext
{
public static string MyContextVar="HELLO";
}
在任何一个窗体中只需要MyContext.MyContextVar就可以获得这个“HELLO”。不过这只是一个简单的例子,这样不是线程安全的,如果做线程安全的上下文还是比这个复杂的:)
2. 两个窗体之间传值一般有两种思路,利用上面提到的上下文是一种办法,另一种办法是互相之间通过delagate来进行值传递,相比于常见的入门级玩家使用的直接爆露public属性的方法,delegate是一个比较完善的解决方案,可以应用在商业开发中。
比如B在关闭时将B中的某个属性BStatus传回A并且显示在A的txtFromB上。
A类和B类以外,命名空间内的代码,定义了传递数据的事件:
public delegate void PassB2A(string status);
A的代码
以下为挂载委托处理器并弹出B窗体
private void RiseB()
{
ClassB cls = new ClassB();
cls.passSta += new PassB2A(this.Render2A);
cls.Show();

}

以下为委托的处理器
private void Render2A(string status)
{
txtFromB.Text=status;
}

以下为B的代码
定义爆露的委托,用来传递数据
public PassB2A passSta;

以下为FormB关闭事件的代码,调用委托来传递数据
private void FormB_Closed(object sender, FormClosedEventArgs e)
{
passSta("Hello");
}

}
百度网友b9f7b4d
2008-11-20 · 超过27用户采纳过TA的回答
知道答主
回答量:118
采纳率:0%
帮助的人:0
展开全部
C#中引入了属性
private static 类型 变量名;
public (类型) 属性名
{
get{ return 变量;}
set{ 变量=value;}
}

赋值的话:窗体.属性名=value(所赋予的值);
返回值:窗体.属性名;

你可以到网上去搜索下,属性代替了全局变量,很好用的

如果是定义静态变量的话是不是意味着程序运行中就不能修改了?
静态变量是可以更改的,他保存的是最近操作的数值,就是你开辟了一个固定的内存空间,用于存放这些static类型的变量
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
YBBLACK
2008-11-17 · TA获得超过189个赞
知道小有建树答主
回答量:170
采纳率:0%
帮助的人:180万
展开全部
最简单的方法。新建一个类。静态定义这些信息数据。呵呵。这个类放到APP下(默认的)。这样这个类的属性在任何地方任何窗口都可以使用。
当然不是很安全,但是很符合你的需要。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
闲雅还无私的小牡蛎
2022-01-04
知道答主
回答量:1
采纳率:0%
帮助的人:408
展开全部
静态变量是不会被回收,不是不能修改!!!
在B中想要把信息传给A的方法太多了,为啥非要全局变量:
可以在b中添加一个属性 将值赋值给该属性,然后在A中获取;
可以在通过方法引用类型参数(或者ref/out)在B中赋值,在A中获取;
可以通过在B中添加委托或事件,在A中订阅该委托获取;
。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gpice
2008-11-17 · TA获得超过409个赞
知道小有建树答主
回答量:165
采纳率:0%
帮助的人:110万
展开全部
session cookie 也可以用类 或者少的话 直接写在webconfig里
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(12)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式