无法从另一个表单访问复选框
本文关键字:访问 复选框 表单 另一个 | 更新日期: 2023-09-27 18:09:45
感谢您的帮助
基本上我有麻烦访问一个选项卡上的复选框。我在表单1的表1上有一个复选框。我想把这个复选框传递给表单2,并将结果放在表单2的列表框中
Form1
public static void ShowResults(string strRoutine, string strCaption)
{
ResultsForm.Routine = strRoutine;
ResultsForm.Title = strCaption;
strXMLFileName = xmlDocConfig.SelectSingleNode("config/routine[@key='" + strRoutine + "']/outputfname").Attributes.GetNamedItem("value").Value;
strXMLFileName = clsUtilities.ReplacePathWildcards(strXMLFileName);
strXMLFileName = clsUtilities.ReplacePathWildcards(frmNSTDBQC.xmlDocConfig.SelectSingleNode("config/routine[@key='G']/outputfname").Attributes.GetNamedItem("value").Value) + "''" + strXMLFileName;
ResultsForm.DisplayFile = strXMLFileName;
ResultsForm.ShowDialog();
}
在表单2中,我可以访问选项卡控件,我可以访问QCForms.tcTabs.SelectedTab.Text
并获得正确的结果但QCForm.chkLstLines.Items.Count
显示0事件尽管我选中了10个项目
形式2
public void frmResults_Load(object sender, EventArgs e)
{
int i = 0;
this.Text = "Results - " + this.Title;
switch (QCForm.tcTabs.SelectedTab.Text)
{
case "Line Checks":
i = 0;
while (i < QCForm.chkLstLines.Items.Count)
{
if ( QCForm.chkLstLines.GetItemChecked(i))
{
lstFeatures.Items.Add(QCForm.chkLstLines.Items[i].ToString()); // VB6.GetItemString(QCForm.chkLstLines, i));
}
i++;
}
}
}
编辑形式1
public static void ShowResults(string strRoutine, string strCaption)
{
var ResultsForm = new Form(this);
//ResultsForm.Routine = strRoutine;
//ResultsForm.Title = strCaption;
strXMLFileName = xmlDocConfig.SelectSingleNode("config/routine[@key='" + strRoutine + "']/outputfname").Attributes.GetNamedItem("value").Value;
strXMLFileName = clsUtilities.ReplacePathWildcards(strXMLFileName);
strXMLFileName = clsUtilities.ReplacePathWildcards(frmNSTDBQC.xmlDocConfig.SelectSingleNode("config/routine[@key='G']/outputfname").Attributes.GetNamedItem("value").Value) + "''" + strXMLFileName;
//ResultsForm.DisplayFile = strXMLFileName;
ResultsForm.ShowDialog();
}
形式2
private frmNSTDBQC QCForm;
public frmResults(frmNSTDBQC qcForm)
{
InitializeComponent();
QCForm = qcForm;
}
获取与Form1
相同的实例,您以这种方式添加复选框
Form2
is:
private Form1 form1;
public Form2(Form1 form)
{
form1 = form;
}
// now you can use form1 as object
现在显示Form2
从Form1
var form2 = new Form(this); //pass instance
form2.ShowDialog();
如果两个窗体都打开并且你想让它们交互,如果你先创建Form1,然后创建Form2,你可以使Form2能够看到Form1的变化,在Form2中创建一个CheckedListBox属性并将其初始化为Form1中的CheckedListBox对象。注意,引用是在创建checklistbox并初始化其内容之后设置的。
然而,这是一个有点"原始"的方式进行。一个更好的方法是使用一个对象列表来表示Form1
中的数据。(E.g. List<Yourobject>)
作为CheckedListBox的数据源,绑定到列表框中的属性,以便列表框设置/重置数据中的Checked属性,然后使用
在两个表单之间共享该数据列表List<YourObject>
集合,在Form1中初始化后打开它。
记住,YourObject类必须在Checked属性上实现PropertyChanged来通知更改,如果是这种情况,最好使用BindingList而不仅仅是List集合对象,因为BindingList实现了事件来通知UI它的内容已经更改,就像ObservableCollection为WPF所做的那样。HTH