无法从其他表单访问Checkbox

时间:2015-08-24 13:02:06

标签: c#

感谢任何帮助

基本上我在选项卡上访问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.TextQCForm.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;    
    }

2 个答案:

答案 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