背景/背景
所以我正在构建一个带有2个Excel文件的程序,并比较它们突出显示的差异。这工作正常。现在我正在开发第二种形式,它做了一个非常相似的事情,但基本上是#34;应用"变化。现在在第一种形式中我有两个包含文件位置的文本框,但是在突出显示更改后出现的第二个表单上只有一个Apply按钮,因此我需要从Form1下拉文件的文本框路径这似乎不适用于mt代码:
CODE
public partial class Form2 : Form
{
Form1 form1 = new Form1();
public Form2()
{
InitializeComponent();
btnApply1.Click += new EventHandler(this.btnApply_Click);
btnCancel1.Click += new EventHandler(this.btnCancel1_Click);
}
private void btnApply_Click(object sender, EventArgs e)
{
foreach (Process clsProcess in Process.GetProcesses())
{
if (clsProcess.ProcessName.Equals("EXCEL"))
{
clsProcess.Kill();
break;
}
}
new CRCCompareWorksheets.CompareHelper().ApplyChanges(
form1.ExcelPath1.Text, form1.ExcelPath2.Text, "CRC");
}
private void btnCancel1_Click(object sender, EventArgs e)
{
new CRCCompareWorksheets.CompareHelper().CancelApplication();
}
}
问题
因此,在我调用应用更改的函数的行中,变量form1.ExcelPath1.Text
和form1.ExcelPath1.Text
都是空白的,因此文件位置没有被拉过,没有任何作用:(
答案 0 :(得分:2)
这里的问题是,您创建了Form1
的新实例。我想,Form2
打开了Form1
。在这种情况下,我会将调用表单的引用提供给新生成的Form2
。这可能类似于以下内容:
<强>窗体2 强>
public partial class Form2 : Form
{
Form1 form1 = null;
public Form2(Form1 form1)
{
InitializeComponent();
this.form1 = form1;
btnApply1.Click += new EventHandler(this.btnApply_Click);
btnCancel1.Click += new EventHandler(this.btnCancel1_Click);
}
private void btnApply_Click(object sender, EventArgs e)
{
foreach (Process clsProcess in Process.GetProcesses())
{
if (clsProcess.ProcessName.Equals("EXCEL"))
{
clsProcess.Kill();
break;
}
}
new CRCCompareWorksheets.CompareHelper().ApplyChanges(form1.ExcelPath1.Text, form1.ExcelPath2.Text, "CRC");
}
private void btnCancel1_Click(object sender, EventArgs e)
{
new CRCCompareWorksheets.CompareHelper().CancelApplication();
}
}
在Form1
中,您需要将Form2
的调用更改为以下内容:
Form2 frm = new Form2(this);
frm.Show();
此外,最好为您想要从TextBoxes
读取的值创建属性,而不是将控件公开:
// Properties in Form1
public string ExcelPath1Text
{
get
{
return this.ExcelPath1.Text;
}
set
{
this.ExcelPath1.Text = value;
}
}
public string ExcelPath2Text
{
get
{
return this.ExcelPath2.Text;
}
set
{
this.ExcelPath2.Text = value;
}
}
然后使用Form2
中的属性:
CRCCompareWorksheets.CompareHelper().ApplyChanges(form1.ExcelPath1Text, form1.ExcelPath2Text, "CRC");
答案 1 :(得分:1)
目前您正在使用form2创建一个新的form1,而不是使用包含您想要传递给form2的数据的现有form1。
您应该将form1传递给form2构造函数:
public partial class Form2 : Form
{
Form1 form1 = { get; set; }
public Form2(Form form1)
{
this.form1 = form1;
InitializeComponent();
btnApply1.Click += new EventHandler(this.btnApply_Click);
btnCancel1.Click += new EventHandler(this.btnCancel1_Click);
}
当你创建form2时(我假设这是在form1中):
Form2 form2 = new Form2(this);