C# 公共静态变量

C# 公共静态变量,c#,C#,我在C#Windows窗体应用程序中使用了一个公共静态变量。我有两个文件,分别是Audits.cs和Findings.cs。我在Audits.cs文件中创建了一个公共静态变量作为F_Status,并在列表视图中选择某个项目时将其分配给值“1”。我将在if语句的Findings.cs文件中使用这个变量。我在Findings.cs文件中的编码如下 if (Audits.F_Status==1) { // Do something } 我已经做了一些断点并测试了编码。在Audits.cs文件中

我在C#Windows窗体应用程序中使用了一个公共静态变量。我有两个文件,分别是
Audits.cs
Findings.cs
。我在
Audits.cs
文件中创建了一个公共静态变量作为F_Status,并在
列表视图中选择某个项目时将其分配给值“1”。我将在if语句的
Findings.cs
文件中使用这个变量。我在
Findings.cs
文件中的编码如下

if (Audits.F_Status==1)
{
   // Do something
}

我已经做了一些断点并测试了编码。在
Audits.cs
文件中,变量被分配到值“1”,但是当涉及到
Findings.cs
文件中的if语句时,F_状态的值变为“0”。我不明白为什么?如果有人能帮我,那就太好了

看起来该值是在其他地方设置的。要找出发生这种情况的地方,请将变量实现为属性并在其上设置断点。当然,不要使用auto属性,因为它不会达到断点。我猜您在事件ListView.ItemSelectionChanged的处理程序中设置了F_Status=1。当所选项目发生更改时,ListView会多次引发该事件:最后一次可能表示之前所选项目未选中

MSDN的参考包括调试事件行为的示例代码。但是这个例子调用MessageBox.Show,对我来说,当它是一个窗口事件时,它违背了分析事件行为的目的。我想在文件的顶部添加:

使用系统诊断

并在事件处理程序中添加对Trace.WriteLine的适当调用,以查看IsSelected的值是如何更改的


正如一位评论者所指出的,有更好的设计来告诉表单B,表单a的ListView上的项目被选中了。表单A中的公共静态变量是不受欢迎的,因为表单B可以更改值,这可能不是您想要的,并且通常会导致灾难。web上有许多用于设计表单之间交互的示例-使用一种方法。

可能在某个地方再次设置为
0
?请为结果的相关部分添加代码,特别是显示设置值的时间。尽管您似乎已经调试过,
Findings.cs
中的语句是否可能在
Audits.cs
中的赋值之前执行?除了这两个地方之外,我没有在其他地方使用此变量。“我正在使用公共静态变量”。好吧,不要。找到一种正确编码的方法。公共静态变量总是表示您的体系结构已损坏。无论如何,您将无法正确地对此进行单元测试。或者,自动搜索项目中对变量的所有引用(但不包括通过反射进行的访问)。