0

私はまだC#に慣れていないので、ご容赦ください。

Form1 に aDataGridViewと aがありますButton。このボタンが開きますForm2

Form2と閉じる が含まれてTextBoxいます。ButtonForm2

TextBoxのテキストをForm1Form2の最初のセルに書き込む必要があります。DataGridView私が開発しているアプリケーションでは、すでに他のデータDataGridViewForm1.

ここに Visual Studio 2010 ファイルをアップロードしました。

編集:

このスクリーンショットを見てください:

ここに画像の説明を入力

私が使用しているコードは次のとおりです。

public partial class Form2 : Form
{
    public Form2()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Form1 form1 = new Form1();
        form1.dataGridView1.Rows[0].Cells[0].Value = textBox1.Text;
        this.Close();
    }
}

Form1したくないときに新しいインスタンスを作成しているようです。

助けに感謝します。

4

2 に答える 2

1

Form2メイン フォーム ( ) を (再度) インスタンス化する必要はありませんForm1

より適切な方法は、テキスト ボックスを含む補助フォームをモーダル ダイアログ ウィンドウとして開き、Form1ユーザーが入力したテキストにオープナー フォーム ( ) がアクセスできるようにすることForm2です。

以下に、必要な変更について説明します。

Form2変更:

1.- 新しいクラス メンバーを追加して、テキスト ボックスに導入される文字列を格納しますtextBox1

public String textFromTextBox = null;

2.- OK ボタンのクリック イベント ハンドラーにコードを追加してtextFromTextBox、テキスト ボックスに導入された値を新しいクラス メンバーに格納します。

3.- 最後に、同じクリック イベント処理コードで、DialogResultプロパティを に設定しますDialogResult.OK

コードは次のForm2ようになります。

public partial class Form2 : Form
{
    [...]

    // This class member will store the string value 
    // the user enters in the text-box
    public String textFromTextBox = null;

    [...]

    // This is the event-handling code that you must place for
    // the OK button.
    private void button1_Click(object sender, EventArgs e)
    {
        this.textFromTextBox = this.textBox1.Text;
        this.DialogResult = DialogResult.OK;
    }
}

Form1変化

1.-「テキストを入力」というラベルが付いたボタン(実際にはコードにありません)で、ClickイベントハンドラーにForm2モーダルとして開くために必要なコードを配置しますDialog

2.-Form2textFromTextBoxメンバーに格納されている値を回復することにより、それに応じてデータ グリッドのセル値を設定します。

3.- 最後にForm2インスタンスを破棄します。

   Form2 myFormWithATextBox = new Form2();

   if (myFormWithATextBox.ShowDialog(this) == DialogResult.OK)
   {
      this.dataGridView1.Rows[0].Cells[0].Value = myFormWithATextBox.textFromTextBox;
   }
   myFormWithATextBox.Dispose();

Form1メイン フォームは単なる補助フォーム コントロールでありForm2、アプリケーションのフローをあまり制御しないため、メイン フォームをインスタンス化する責任を負わないことを考慮してください。

于 2012-09-30T20:18:32.973 に答える
0

次のようにパラメーターを受け入れる別のコントラクターを作成することにより、フォームから別のフォームに変数を渡すことができます。

1) form1 に移動し、別の請負業者を作成します。

    public Form1(string myString)
    {
        InitializeComponent();

        if (myString != null)
            dataGridView1.Rows[0].Cells[0].Value = myString;
    }

2) form2 に移動し、ボタンの下に次のコードを記述します。

    private void button1_Click(object sender, EventArgs e)
    {
        Form1 frm1 = new Form1(textBox1.Text);
        frm1.ShowDialog();
    }

ここに、変更後のアプリケーションがあります

于 2012-09-30T20:27:20.443 に答える