0

我是 C# 和一般编程的新手,在春季开始上课之前尝试学习/练习一下。无论如何,我正在尝试将复选框控件的标签从表单 A 到表单 B 放入 FormB 上的文本框中(使用字符串生成器,因为文本框中还有其他信息也将进入 FormB 文本框)现在我可以让它正常工作表单 B 加载,但由于我的程序如何流动,我需要在单击按钮时实现这一点。以下是处理 FormB 加载的当前代码。抱歉,如果我在这里遗漏了一些基本的东西。

表格 B. 我省略了一些我的字符串生成器行以获得空间。

   public CodeBlueForm(List<string> ids, string custNameCb, string custWtnCb, string custCbrCb, string custNotesCb)
    {
        InitializeComponent();

        cbNameText.Text = custNameCb;
        cbWtnText.Text = custWtnCb;
        cbCbrText.Text = custCbrCb;
        cbNotesText.Text = custNotesCb;
        string checkBoxesLines = "Lights: ";
        foreach (string id in ids)
            checkBoxesLines += string.Format("{0}, ", id);
                System.Text.StringBuilder strBuilder = new System.Text.StringBuilder();
            strBuilder.AppendLine("Inet Notes: " + "\r" + ((checkBoxesLines) + cbNotesText.Text));

            cbViewText.Text = strBuilder.ToString();
        {

我目前的表格 A

private void code_blue_link_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
    {
        var checkBoxIds = GetCheckBoxIds();

        tShootCb = tShootText.Text;
        svcsOfferedCb = svcsOfferedText.Text;
        otherNotesCb = otherNotesText.Text;
        custModemCb = custModemText.Text;
        //Opens CODE BLUE form and pushes text to it.
        CodeBlueForm cbForm = new CodeBlueForm(checkBoxIds, custNameText.Text, custCbrText.Text, custBtnText.Text, custModemCb + "\r\n" + tShootCb + "\r\n" + svcsOfferedCb + "\r\n" + otherNotesCb);

        cbForm.Show();

    }
    private List<string> GetCheckBoxIds()
    {
        List<string> checkBoxIds = new List<string>();
        foreach (Control control in pnlCheckBoxes.Controls)
        {
            if (control is CheckBox)
            {
                CheckBox checkBox = (CheckBox)control;

                if (checkBox.Checked && checkBox.Tag is string)
                    checkBoxIds.Add((string)checkBox.Tag);
            }
        }
        return checkBoxIds;

正如我所说,这目前确实适用于 Form B 加载,但我需要弄清楚如何使其在 FormB 按钮单击中工作。这方面的任何方向都会很棒。

谢谢

4

1 回答 1

2

您可以在创建时将 FormA 的句柄传递给 FormB。然后可以使用该句柄在 FormB 中访问 FormA 上的所有项目。

public class FormA : Form
{
    public FormA()
    {
        InitializeComponent();
    }

    public void buttonClick(object sender, EventArgs e)
    {
        FormB formB = new FormB(this);
        formB.Show();
    }
}

public class FormB : Form
{
    private FormA parent;

    public FormB(FormA parent)
    {
        InitializeComponent();
        this.parent = parent;
    }

    public void buttonClick(object sender, EventArgs e)
    {
        myTextBox.Text = parent.myCheckBox.Text;
    }
}

在此示例中,您在 FormA 上调用了一个复选框myCheckBox,在 FormB 上调用了一个文本框myTextBox,每个表单上都有一个按钮。每个按钮都有一个buttonClick注册到点击事件的方法。FormA 上的按钮创建并显示 FormB 的一个实例,并将一个句柄传递给它自己 ( this)。然后,FormB 上的按钮可以使用句柄(parent在本例中调用)来访问 FormA 上的所有控件,如果您通过将属性更改为IFF使它们可以访问的话。(这不是一个好方法,但为了简单起见,我建议现在这样做Modifierspublic. 一旦你理解了依赖关系,你应该继续创建公共 getter/setter 方法来准确封装应该更改的内容,而不是暴露整个控件。)

于 2012-09-05T01:46:44.123 回答