Foxtable(狐表)用户栏目专家坐堂 → vb.net 代码转换请教


  共有1903人关注过本帖树形打印复制链接

主题:vb.net 代码转换请教

帅哥哟,离线,有人找我吗?
ljh29206
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1368 积分:12195 威望:0 精华:0 注册:2012/3/5 11:32:00
vb.net 代码转换请教  发帖心情 Post By:2024/6/28 11:44:00 [只看该作者]

以下 为 代码  从 c# 转换到 vb.net

如何把 该内容 变为  foxtable 可用的全局代码 求指点 ,谢谢 老板

Imports System
Imports System.Linq
Imports Microsoft.Office.Interop.Outlook
Imports System.Collections.Generic

Namespace EmailReceiver
    Class Program
        Shared outlookApp As ApplicationClass = New Microsoft.Office.Interop.Outlook.ApplicationClass()
        Shared ns As [NameSpace]

        Private Shared Sub Main(ByVal args As String())
            Console.WriteLine("start to monitor new emails")
            ns = outlookApp.GetNamespace("MAPI")
            outlookApp.NewMailEx += New ApplicationEvents_11_NewMailExEventHandler(AddressOf outlookApp_NewMailEx)
            outlookApp.NewMail += New ApplicationEvents_11_NewMailEventHandler(AddressOf outlookApp_NewMail)

            While True
            End While
        End Sub

        Private Shared Sub outlookApp_NewMail()
            Console.WriteLine("a new message comes: new email")
        End Sub

        Private Shared Sub outlookApp_NewMailEx(ByVal EntryIDCollection As String)
            Console.WriteLine("a new message comes")
            AnalyzeNewItem(EntryIDCollection)
        End Sub

        Private Shared Sub AnalyzeNewItem(ByVal entry As String)
            Dim inbox = ns.GetDefaultFolder(OlDefaultFolders.olFolderInbox)
            Dim allmails As List(Of MailItem) = New List(Of MailItem)()

            For Each item In inbox.Items

                If TypeOf item Is MailItem Then
                    Dim mail = TryCast(item, MailItem)
                    allmails.Add(mail)
                End If
            Next

            Dim latest = allmails.Max(Function(s) s.ReceivedTime)
            Dim latestMailItem = allmails.FirstOrDefault(Function(s) s.ReceivedTime = latest)

            If latestMailItem IsNot Nothing Then
                Console.WriteLine(latestMailItem.Subject)
                Console.WriteLine(latestMailItem.[To])
                Console.WriteLine(latestMailItem.SenderName)
                Console.WriteLine(latestMailItem.ReceivedTime)
                Console.WriteLine(latestMailItem.Body)
            End If
        End Sub
    End Class
End Namespace

 回到顶部
帅哥哟,离线,有人找我吗?
baicaocao
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:497 积分:4898 威望:0 精华:0 注册:2012/4/20 8:42:00
  发帖心情 Post By:2024/6/28 13:16:00 [只看该作者]

Microsoft Visual Studio Enterprise 2022 中,有个扩展里面有个插件,可以转换,code converter(vb-c#)

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111381 积分:566969 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/6/28 13:41:00 [只看该作者]

大概

Public Class Program
    Shared outlookApp As New Microsoft.Office.Interop.Outlook.ApplicationClass()
    Shared ns As [NameSpace]
    
    Public Shared Sub Main()
        msgbox("start to monitor new emails")
        ns = outlookApp.GetNamespace("MAPI")
        AddHandler outlookApp.NewMailEx , AddressOf outlookApp_NewMailEx
        AddHandler outlookApp.NewMail , AddressOf outlookApp_NewMail
        
        While True
        End While
    End Sub
    
    Private Shared Sub outlookApp_NewMail()
        msgbox("a new message comes: new email")
    End Sub
    
    Private Shared Sub outlookApp_NewMailEx(ByVal EntryIDCollection As String)
        msgbox("a new message comes")
        AnalyzeNewItem(EntryIDCollection)
    End Sub
    
    Private Shared Sub AnalyzeNewItem(ByVal entry As String)
        Dim inbox = ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox)
        Dim allmails As List(Of Microsoft.Office.Interop.Outlook.MailItem) = New List(Of Microsoft.Office.Interop.Outlook.MailItem)()
        
        For Each item In inbox.Items
            
            If TypeOf item Is Microsoft.Office.Interop.Outlook.MailItem Then
                Dim mail = TryCast(item, Microsoft.Office.Interop.Outlook.MailItem)
                allmails.Add(mail)
            End If
        Next
        
        Dim latest = allmails.Max(Function(s) s.ReceivedTime)
        Dim latestMailItem = allmails.FirstOrDefault(Function(s) s.ReceivedTime = latest)
        
        If latestMailItem IsNot Nothing Then
            msgbox(latestMailItem.Subject)
            msgbox(latestMailItem.[To])
            msgbox(latestMailItem.SenderName)
            msgbox(latestMailItem.ReceivedTime)
            msgbox(latestMailItem.Body)
        End If
    End Sub
End Class


 回到顶部
帅哥哟,离线,有人找我吗?
ljh29206
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1368 积分:12195 威望:0 精华:0 注册:2012/3/5 11:32:00
  发帖心情 Post By:2024/6/28 15:03:00 [只看该作者]

这个代码 是 已经从 c# 转换为 vb 的了

篮板  我用 你的代码 放进去  全局代码 里面 

会提示   未定义  name space

sheared ns as [namespace]

可否帮忙再看看呢 ,  foxtable 可以这样定义命名空间的?  不懂怎么搞 求助

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111381 积分:566969 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/6/28 15:05:00 [只看该作者]

这个 [namespace]应该不是命名空间,而是一个类型。

改为这样试试
sheared ns as object

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111381 积分:566969 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2024/6/28 15:11:00 [只看该作者]

https://learn.microsoft.com/zh-cn/office/vba/api/Outlook.Application.GetNamespace

sheared ns as Microsoft.Office.Interop.Outlook.namespace

 回到顶部