我正在尝试关闭每个打开的表单,只要它的名称与特定的表单名称不匹配(某些表单应保持打开状态),但它的工作方式不像我认为的那样,而且我不知道为什么。< / p>
我为每个循环和Application.OpenForms使用一个列表将表单存储在列表中(当我尝试将此代码粘贴到其中时,格式不起作用)。
然后,我使用另一个foreach循环将列表中表单的名称与我要保持打开状态的名称进行比较。当循环到达frmMain时,if语句返回true,并且窗体关闭,从而关闭应用程序。
如果我删除了if语句的OR部分,则if语句变为: if(form.Name!= frmMain) 然后就可以了。
//Close all user dependant forms that might be open.
foreach (Form form in forms)
{
if(form.Name != "frmMain" || form.Name != "frmDice")
{
form.Close();
}
}
为什么代码不能与if语句中的OR配合使用?
答案 0 :(得分:2)
因为您需要使用&&
,而不是||
。
如果表单命名为"frmMain"
,那么它也不能命名为"frmDice"
-
因此对于"frmMain"
,条件的form.Name != "frmDice"
部分将返回true
,当然,当表单命名为"frmDice"
-{{1} }部分条件将返回form.Name != "frmMain"
。
这意味着所有表格将根据您当前的条件关闭。
将您的条件更改为true
。
当然,它也可以表示为if(form.Name != "frmMain" && form.Name != "frmDice")
,但我个人认为它的可读性较差。
答案 1 :(得分:1)
您的条件将始终解析为true。如果不是真的,名称应该同时为“ frmMain”和“ frmDice”,这是不可能的。我想你想要的是
!( form.Name == "frmMain" || form.Name == "frmDice" )
或者,
( form.Name != "frmMain" && form.Name != "frmDice" )