【问题标题】:How to use a method that is in a partial class from another partial class如何使用来自另一个部分类的部分类中的方法
【发布时间】:2020-01-27 01:36:40
【问题描述】:

我正在使用 Visual Studio 处理 Excel 文件并使用 C# 进行编程。我在工作表 Seismic2D 中添加了一个列表框控件。我想用工作表 FileList 中的信息填充这个列表框。我正在尝试编程的按钮位于功能区中。

我尝试使用 Sis2D case=new Sis2D();但我得到了一个错误(没有给出与所需的形式参数'factory' of Sis2D.Sis2D(Factory,IServiceProvider)相对应的参数

在功能区文件中...

public partial class Ribbon1
    {
       private void ListRefresh_Click(object sender, RibbonControlEventArgs e)
       {
           Excel.Worksheet wsFL = Globals.ThisWorkbook.Worksheets["FileList"];
           Sis2D clase = new Sis2D();
           clase.ListaFiles.Items.Add(wsFL.Range["A2"]);
           clase.ListaFiles.Items.Add(wsFL.Range["A3"]);
        }
    }

在 Sis2D.cs 文件中

public partial class Sis2D

我尝试的另一件事是在 Sis2D 中添加它

public partial class Sis2D
{
public void LlenaListBox()
        {
           Excel.Worksheet wsFL = Globals.ThisWorkbook.Worksheets["FileList"];
           ListaFiles.Items.Add(wsFL.Range["A2"].Value);
           ListaFiles.Items.Add(wsFL.Range["A3"].Value);
        }
}

但是我不知道如何从 Ribbon 部分类中调用这个方法。

我希望能够与 ListBox 交互,添加项目并阅读它们。

【问题讨论】:

  • 构造函数可能在类的其他部分定义中。
  • partial class 真是个坏名字。 partial 关键字只是表明您的类定义可能分布在多个文件中。但是,一旦编译,您就会得到一个 complete class。 --- 所以 Dorian,寻找为 Sis2D 定义构造函数的文件。
  • Visual Studio 为 Sis2D 创建文件(因为链接到工作表)并为功能区创建文件。在功能区中,我有一个要填充 ListBox 的按钮。列表框位于由 Sis2D 管理的工作表内。所以,我想要的是调用位于不同部分类中的方法与位于不同部分类中的类。
  • 你想调用不同类的私有方法吗?纳夫说,不是吗?
  • 这背后的主要思想是我添加了Listbox。问题是我如何向其中添加项目或更改项目。它与 vba 列表框几乎相同:它取决于添加它的工作表。

标签: c# partial-classes


【解决方案1】:

首先,我要感谢您对帮助我的所有帮助和兴趣。如果我的问题可能不清楚,我想道歉,因为我是初学者。最后,我想要的,用 C# 在 Visual Studio 的工作表中填充 ListBox,我得到了它。

在功能区中,按钮的代码是:

C#
public partial class Ribbon1
{
private void FL_Click(object sender, RibbonControlEventArgs e)
   {
       Sis2D s = Globals.Sis2D;
       s.LlenaListBox();   
   }
}

在工作表中,代码为:

public partial class Sis2D 
{
public void LlenaListBox()
    {
            Excel.Worksheet wsFL = Globals.ThisWorkbook.Worksheets["Sheet1"];
            ListaF.Items.Add(wsFL.Range["A10"].Value);
            ListaF.Items.Add(wsFL.Range["A11"].Value);
            ListaF.Items.Add(wsFL.Range["A12"].Value);
    }
}

这就是全部。 ListaF 是从 Visual Studio 中的 C# 添加到 sheet1 的 ListBox 到工作表中。 下图显示了工作表的外观: enter image description here

【讨论】:

    【解决方案2】:

    '没有给出与所需形式相对应的参数的错误

    参数 'factory' of Sis2D.Sis2D(Factory,IServiceProvider)' 表示你只有

    Sis2D 类中的以下构造函数。

     public Sis2D(Factory, IServiceProvider)
            {
             ////////////
    
            }
    

    如果你想访问 Sis2D 中的方法,你可以在 Sis2D 类中添加一个空的构造函数。 像下面这样:

       public partial  class Sis2D
       {
        public Sis2D()  //  you need to add this code
        {
        }
        public void LlenaListBox()
        {
            Excel.Worksheet wsFL = Globals.ThisWorkbook.Worksheets["FileList"];
            ListaFiles.Items.Add(wsFL.Range["A2"].Value);
            ListaFiles.Items.Add(wsFL.Range["A3"].Value);
        }
        }
    

    那么您可以使用以下代码访问该方法而不会抛出异常:

    public partial  class Ribbon1
        {
            public void ListRefresh_Click()
            {
                Sis2D clase = new Sis2D();
                clase.LlenaListBox();
    
            }
        }
    

    【讨论】:

    • 非常感谢您的回答。我按照你的建议做了,现在错误是:没有给定的参数对应于 WorksheetBase.WorksheetBase(Factory,IServiceProvider,string, string) 所需的形参 'factory'
    • WorksheetBase 类来自哪里?因为您之前没有提供信息,所以我无法设置它。您可以展示所有课程,以便我们在不遇到错误的情况下解决您的问题。
    • 对不起@Jack,Sis2D 是我给作为工作表类的文件的名称。我不太了解 VSTO 的工作原理。所以,可能,出于这个原因,我的问题不太清楚。无论如何,我认为该错误没有提供有关实际问题的太多信息。这就是为什么我想写出我得到的解决方案,并且超出了这些范围。
    猜你喜欢
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多