感谢任何帮助
基本上我在选项卡上访问checkedlistbox时遇到问题。 我在表单1的选项卡1上有一个checkedlistbox。我想将此复选框传递给表单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;
}
答案 0 :(得分:1)
获取以这种方式添加复选框的CASE
WHEN cellValue() = -1 THEN 'VAC'
WHEN cellValue() = -2 THEN 'SICK'
WHEN cellValue() = 0 THEN ''
ELSE cellValue()
END
的相同实例
Form1
是:
Form2
现在显示private Form1 form1;
public Form2(Form1 form)
{
form1 = form;
}
// now you can use form1 as object
Form2
Form1
答案 1 :(得分:0)
如果您打开了两个表单并希望它们进行交互,如果您创建第一个Form1然后创建Form2,您可以使Form2能够看到Form1中的更改在Form2中创建CheckedListBox属性并将其初始化为CheckedListBox对象站在Form1内。 请注意,在创建CheckedListBox并初始化其内容后设置引用。
然而,这是一种“原始”的方式。一种更好的方法是使用一个表示Form1
中数据的对象列表(E.g. List<Yourobject>)
作为CheckedListBox的数据源,绑定到列表框中的属性,以便列表框设置/重置数据中的Checked属性,然后使用
在这两个表单之间共享此数据列表List<YourObject>
您在Form2的属性中设置的集合在Form1中初始化它后打开它。
请记住,YourObject类必须在Checked属性上实现PropertyChanged以通知更改,并且如果是这种情况,最好使用BindingList而不仅仅是List集合对象,因为BindingList实现事件通知其内容已更改的UI,例如ObservableCollection为WPF执行的操作。 HTH