none
msgbox 中的and 和 or 的问题 RRS feed

  • 问题

  •             If MsgBox("Close the Picture Viewer Program ?", MsgBoxStyle.Question Or MsgBoxStyle.YesNo) = MsgBoxResult.No Then

    这条语句中,or可以换成and,但运行后没有变化,请问and和or有什么区别吗?

    2008年1月15日 7:55

答案

  • 程序块
            If MsgBox("Close the Picture Viewer Program ?", MsgBoxStyle.Question And MsgBoxStyle.YesNo) = MsgBoxResult.No Then
        
            End If

     

     


    这个是错误的, 只能用Or. 用and则不能显示任何MsgBoxStyle.Question以及 MsgBoxStyle.YesNo的设置.

    2008年1月15日 8:37
    版主
  • 我觉得写为or也不是很合适,虽然也有很多这么写的。

    尽量写为MsgBoxStyle.Question + MsgBoxStyle.YesNo。

    因为实际上这里的MsgBoxStyle.Question 和YesNo实际上是数字32和4,此处的and or实际上是对int型 变成二进制进行 按位与或。  32 (100000)or 4 (100) 按位或 就是 100100就是36 等于32+4,所以结果没有错。但是or和+并不是任何时候都一样的,比如1 or 1还是1。当然此处微软考虑到了,所以结果还是正确的。

     

    2008年1月15日 9:14
    版主

全部回复

  • 程序块
            If MsgBox("Close the Picture Viewer Program ?", MsgBoxStyle.Question And MsgBoxStyle.YesNo) = MsgBoxResult.No Then
        
            End If

     

     


    这个是错误的, 只能用Or. 用and则不能显示任何MsgBoxStyle.Question以及 MsgBoxStyle.YesNo的设置.

    2008年1月15日 8:37
    版主
  • 我觉得写为or也不是很合适,虽然也有很多这么写的。

    尽量写为MsgBoxStyle.Question + MsgBoxStyle.YesNo。

    因为实际上这里的MsgBoxStyle.Question 和YesNo实际上是数字32和4,此处的and or实际上是对int型 变成二进制进行 按位与或。  32 (100000)or 4 (100) 按位或 就是 100100就是36 等于32+4,所以结果没有错。但是or和+并不是任何时候都一样的,比如1 or 1还是1。当然此处微软考虑到了,所以结果还是正确的。

     

    2008年1月15日 9:14
    版主
  • 十分感谢前辈的回答,问题解决了
    在开始,我曾试着把or换呈“逗号”,因为对象的属性和方法可以用逗号隔开啊,但运行时,对话框的标题变成了“4”,当时对“4”很困惑呢,原来如此

    另外:不定义msgbox的标题,它会默认承接父窗体的标题吗
    在本例中,对话框的标题是其父窗口的,但我最早接触的是messagebox.show函数,不定义标题的时,对话框的标题是空白

    非常感谢,太谢谢了
    2008年1月16日 1:49