none
ControlExtensions.AddComboBox 方法 (ControlCollection, Range, String)第一个参数不能省略,怎么设定? RRS feed

  • 问题

  • 我在用VS2015开发Excel外接程序时,必须运行时创建组合框,经查可利用ControlExtensions.AddComboBox 方法 (ControlCollection, Range, String),但在使用中不像说明的那样可以不设置第一个参数——ControlCollection,问题是,我不知道该如何设置该参数?请高手指教。

    微软网站上对此方法的说明(https://msdn.microsoft.com/zh-cn/library/ee259140(v=vs.120).aspx)得很清楚:controls

    类型:Microsoft.Office.Tools.Excel.ControlCollection
    要添加控件的集合。不需要您自己提供此参数。Worksheet.Controls 属性(在应用程序级项目中)或 WorksheetBase.Controls 属性(在文档级项目中)返回的集合调用此方法时,将自动提供此参数。

    在示例中也只使用后两个参数,可当我按示例做法设置两个参数是,提示该方法没有两个参数的重载版本,关键的问题可能是版本的不同:网站上适用的是VS2013,而我使用的是VS2015,但程序集是相同的啊,均为  Microsoft.Office.Tools.Excel.v4.0.Utilities(在 Microsoft.Office.Tools.Excel.v4.0.Utilities.dll 中)遗憾的是网页上没VS2015版本可选!





    2016年9月16日 12:32

答案

  • 请注意看此函数原型:

    public static ComboBox AddComboBox(
    	this ControlCollection controls,
    	Range range,
    	string name
    )

    该函数显然第一个参数是一个可选参数。表示“凡是ControlCollection或者是其子类”,一定有AddCombobox方法。

    所以你应该设法找到某个是ControlCollection的集合控件,然后使用AddComboBox方法。

    另外MSDN示例代码:

     Microsoft.Office.Tools.Excel.Controls.ComboBox
            comboBox1 = this.Controls.AddComboBox(
            this.Range["A1", "B1"], "comboBox1");…);

    粗体的this一定是ControlCollection集合的控件或者是子控件。

    另外,函数体内有this的写法是扩展函数,该函数明显针对ControlCollection的实体类或者其子类进行扩展。

    相关于扩展方法,烦请自己参考:https://msdn.microsoft.com/library/bb383977.aspx


    ASP.NET Forum
    StackOverFlow
    FreeRice Donate
    Issues to report
    Free Tech Books Search and Download

    2016年9月18日 12:09
    版主

全部回复

  • 请注意看此函数原型:

    public static ComboBox AddComboBox(
    	this ControlCollection controls,
    	Range range,
    	string name
    )

    该函数显然第一个参数是一个可选参数。表示“凡是ControlCollection或者是其子类”,一定有AddCombobox方法。

    所以你应该设法找到某个是ControlCollection的集合控件,然后使用AddComboBox方法。

    另外MSDN示例代码:

     Microsoft.Office.Tools.Excel.Controls.ComboBox
            comboBox1 = this.Controls.AddComboBox(
            this.Range["A1", "B1"], "comboBox1");…);

    粗体的this一定是ControlCollection集合的控件或者是子控件。

    另外,函数体内有this的写法是扩展函数,该函数明显针对ControlCollection的实体类或者其子类进行扩展。

    相关于扩展方法,烦请自己参考:https://msdn.microsoft.com/library/bb383977.aspx


    ASP.NET Forum
    StackOverFlow
    FreeRice Donate
    Issues to report
    Free Tech Books Search and Download

    2016年9月18日 12:09
    版主
  • 这是扩展方法 extension method,在不改变原有类型源代码的情况下,给原有类型增加方法


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2016年9月19日 1:29