我正在尝试将一组文本框添加到列表中。我不断收到错误,无法从'System.Windows.Forms.TextBox'转换为'Microsoft.Office.Interop.Excel.TextBox'。不知道为什么我收到此错误。我需要添加演员吗? 这是我的代码。我要添加的文本框位于getValues中。我没有使用Windows窗体,所以这个错误对我来说是一个谜。
class DiagnosticsExcelFile: ConfigForm
{
string fileName = "";
private ConfigForm configForm;
Excel.Application xlApp = null;
Excel.Workbook xlWorkBook = null;
Excel.Worksheet xlWorkSheet = null;
List<TextBox> list = new List<TextBox>();
public DiagnosticsExcelFile(ConfigForm config)
{
fileName = "Z:\\UCA\\Diagnostics.xlsx";
this.configForm = config;
this.list.Add(this.configForm.HighOffSetX); // get error here
}
private void getValues()
{
this.configForm.HighOffSetX.Text = "5.0";
this.configForm.HighOffSetY.Text = "5.0";
this.configForm.HighOffSetZ.Text = "5.0";
}
}
答案 0 :(得分:3)
定义您的列表,如:
List<System.Windows.Forms.TextBox> list = new List<System.Windows.Forms.TextBox>();
目前,您的List
指的是来自Microsoft.Office.Interop.Excel.TextBox
的TextBox。
Microsoft.Office.Interop.Excel=
和System.Windows.Forms
都有一个班级TextBox
,因为您还没有显示您的使用指令,我认为您已经
using Microsoft.Office.Interop.Excel;
并且您没有System.Windows.Forms
的使用指令,因此您的代码正在考虑您的List
包含来自Office Interop的TextBox。 (顺便说一句,如果你有两个引用,那么你会得到一个错误的模糊引用TextBox
)
通过明确定义System.Windows.Forms.TextBox
,您的错误就会消失。
答案 1 :(得分:3)
using TextBox = System.Windows.Forms.TextBox;
我通常认为这种方法效率最高。 它不需要很多代码更改,并且可以保持简短的线路。
答案 2 :(得分:1)
您没有指定完整的命名空间,但您可能有:
using System.Windows.Forms;
using Microsoft.Office.Interop.Excel;
在你的代码文件中。
编译器无法分辨您的意思是哪个TextBox。您可以完全限定每个类型名称,或者为using
s。
using xl = Microsoft.Office.Interop.Excel;
然后,您将Excel文本框称为xl.TextBox。仅指定TextBox
将为您提供您期望的System.Windows.Forms
。
答案 3 :(得分:0)
您正在从System.Windows.Forms.TextBox隐藏TextBox类型(可能使用TextBox = Microsoft.Office.Interop.Excel.TextBox)。
尝试使用以下命名声明您的列表:
List<System.Windows.Forms.TextBox> list = new List<System.Windows.Forms.TextBox>();
答案 4 :(得分:0)
您的定义是正确的。将新成员添加到列表时会发生此问题。请尝试以下方法:
list.Add(HighOffSetX);
此时你不需要整个“这个”的东西。