0

別のアクティブなフォームからボタンをクリックして、モーダル メイン フォームの TextBox のテキストを変更しようとしています。ヘルプが必要です。

Main form *Modal mode

public void changetext(){
  textbox1.text = textnew;
}

form2 *active form

private void btnChange_Click(object sender, EventArgs e)
{
   mainform form1 = new mainform;
   public String textnew = "NEW"
   form1.changetext();
   this.close
}

このコードを使用するのにうんざりしましたが、次のエラーが表示されます: Invoke または BeginInvoke は、ウィンドウ ハンドルが作成されるまで、コントロールで呼び出すことはできません。:

public void LabelWrite(string value)
{
    if (InvokeRequired)
        Invoke(new LabelWriteDelegate(LabelWrite), value);
    else
    {
        textBox1.Text = value;
    }
}
    delegate void LabelWriteDelegate(string value);
4

2 に答える 2

1

ロジックに問題があると思います。あなたの要件を理解していれば、検索テキストボックスを含むメインフォームがあります。ユーザーが検索を起動すると、考えられるすべての結果が表示されるモーダル フォームが開きます。ユーザーが必要な値を選択すると、メイン フォームに結果が表示されます。これは正しいです?もしそうなら、あなたはこのようにするべきです:

  • 結果を含むモーダル フォームにパブリック プロパティを作成します。
  • パブリック プロパティを作成するか、モーダル フォームに新しいコンストラクターを作成して、クエリを渡します。
  • メイン フォームでは、モーダル フォームが破棄されない限り、そのパブリック プロパティにアクセスできます。

例えば:

var result = null;
var modal = new ModalForm(query);
if(modal.ShowDialog() == DialogResult.OK) // This means the user has selected a value
{
    result = modal.SelectedResult;
}
modal.Close();
modal.Dispose();
于 2012-11-19T10:08:13.910 に答える
0

最も簡単な方法は、新しいテキストをモーダルウィンドウに渡すことです。例えば:

メインフォームモーダルモード

public void changetext(String textnew){
  textbox1.text = textnew;
}

form2アクティブフォーム

private void btnChange_Click(object sender, EventArgs e)
        {
           mainform form1 = new mainform;
           form1.changetext("NEW");
           this.close
        }

もし私があなただったら、フォーム名も変更するでしょうが、少し混乱します。PS私はまだthis.close必要なものを取得していません。

于 2012-11-19T08:22:03.093 に答える