0

私はC#とプログラミング全般に不慣れで、春にクラスを開始する前に少し学習/練習しようとしています。とにかく、フォームAからフォームBへのチェックボックスコントロールのタグをフォームBのテキストボックスに取得しようとしています(フォームBテキストボックスにもテキストボックスからの他の情報があるため、文字列ビルダーを使用します)これでうまく動作するようになりましたフォーム B のロードですが、私のプログラムのフローにより、ボタンのクリックでこれを実現する必要があります。以下は、FormB ロードで動作している現在のコードです。ここに基本的なものが欠けている場合は申し訳ありません。

フォーム B. スペースのために stringbuilder の行の一部を省略しました。

   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;

私が言ったように、これは現在フォームBのロードで機能しますが、フォームBのボタンクリックで機能させる方法を理解する必要があります。これに関する方向性は素晴らしいでしょう。

ありがとう

4

1 に答える 1

2

作成時に FormA のハンドルを FormB に渡すことができます。FormA にあるすべてのアイテムは、そのハンドルを使用して FormB でアクセスできます。

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;
    }
}

この例では、myCheckBoxFormA で呼び出されたチェックボックス、FormB で呼び出さmyTextBoxれたテキストボックス、および各フォームにボタンがあります。buttonClick各ボタンには、クリック イベントに登録されているというメソッドがあります。FormA のボタンは、FormB のインスタンスを作成して表示し、それ自体にハンドルを渡します ( this)。次に、FormB のボタンはハンドル (この例では呼び出されます) を使用して、プロパティを に変更することでアクセス可能にしparentた FormA IFFのすべてのコントロールにアクセスできます。(これは良い方法ではありませんが、簡単にするために、今のところその方法をお勧めしますModifierspublic. 依存関係を理解し​​たら、create public getter/setter メソッドに進み、コントロール全体を公開するのではなく、何を変更する必要があるかを正確にカプセル化する必要があります。)

于 2012-09-05T01:46:44.123 に答える