-2

我正在尝试将一些 VBA (outlook) 转换为 c# 以作为插件。与之斗争。该代码更改了 Outlook 中回复/全部回复/转发表单上的帐户下拉列表。现在我必须输入更多无用的东西,因为编辑器抱怨代码多于文本。我已经转换了 99%。

public string Set_Account(string AccountName, Outlook.MailItem M)
    {
        string tempSet_Account = null;
        Outlook.Inspector OLI = null;
        string strAccountBtnName = null;
        int intLoc = 0;
        const int ID_ACCOUNTS = 31224;

        Office.CommandBars CBs = null;
        Office.CommandBarPopup CBP = null;
        Office.CommandBarControl MC = null;

        M.Display();

        OLI = M.GetInspector;
        if (OLI != null)
        {
            CBs = OLI.CommandBars;
            CBP = CBs.FindControl(, ID_ACCOUNTS); // This line errors and I can't find what goes in it to make it work
            CBP.Reset();
            if (CBP != null)
            {
                foreach (Office.CommandBarControl MCWithinLoop in CBP.Controls)
                {
                    MC = MCWithinLoop;
                    intLoc = MCWithinLoop.Caption.IndexOf(" ") + 1;
                    if (intLoc > 0)
                    {
                        strAccountBtnName = MCWithinLoop.Caption.Substring(intLoc);
                    }
                    else
                    {
                        strAccountBtnName = MCWithinLoop.Caption;
                    }
                    if (strAccountBtnName == AccountName)
                    {
                        MCWithinLoop.Execute();
                        tempSet_Account = AccountName;
                        break;
                    }
                }
            }
        }
        tempSet_Account = "";

        MC = null;
        CBP = null;
        CBs = null;
        OLI = null;
        return tempSet_Account;
    }

我在这条线上遇到了麻烦

CBP = CBs.FindControl(, ID_ACCOUNTS);

它失败并说它需要一个类型“MsoControlType”,但我找不到任何适合的控件类型。似乎在 VBA 中你可以找到控制只有一个条目(另一个是空白)在 C# 中你需要 2。我把它放在编译器中的每一件事都抱怨

无法将 Microsoft.Office.Core.MsoControlType.msoCommandBarControl 转换为 ...msoCommandBarPopup

但我在任何地方都找不到对它的引用。

4

1 回答 1

0

在 C# 中,您不能像在此处所做的那样省略参数:“.FindControl(”。如果您必须传递“null”或 null 对象。

于 2013-09-20T13:38:48.890 回答