19

LabelX1というラベルがあります。これはform2にあります。form1にはボタンがあります。ボタンのテキストを他のフォームのラベルに転送したい。私が試してみました

form2 frm2 = new form2();
frm2.labelX1.Text = this.button1.text;

しかし、それは機能しません。これを行うための簡単で簡単な方法はありますか?

4

13 に答える 13

32

ラベルまたはそのプロパティを公開する必要があります。

フォーム2:

public string LabelText
{
    get
    {
        return this.labelX1.Text;
    }
    set
    {
        this.labelX1.Text = value;
    }
}

次に、次のことができます。

form2 frm2 = new form2();
frm2.LabelText = this.button1.text;
于 2012-05-22T14:26:01.430 に答える
9

Form2のコンストラクターは次のように変更できます。

public Form2(string labelText)
{
    InitializeComponent();
    this.labelX1.Text = labelText;
}

次に、テキストを渡すForm2を作成します。

Form2 frm2 = new Form2(this.button1.text);
于 2012-05-22T14:31:32.610 に答える
6

またはあなたはこれを行うことができます>>

((Label)frm2.Controls["labelX1"]).Text = "test";
于 2012-05-22T14:36:34.583 に答える
5

form2の中にこれを書いてください

public void ChangeLabel(string s)
{
    labelX1.Text = s;
}

次に、フォーム2を作成する場所でこれを行います

form2 frm2 = new form2();
frm2.ChangeLabel(this.button1.text);
于 2012-05-22T14:35:12.520 に答える
3

これを行うための簡単で簡単な方法はありますか?

最も簡単な方法は、labelX1をform2のパブリックメンバーにすることです。あなたが抱えている問題は、Form1コードからform2.labelX1が表示されないためです。form2 Designerでは、labelX1のプロパティに移動して、その可視性をpublic/internalに設定できます。

より良いアプローチは、labelX1.Textをクラス外のコードで設定できるプロパティとして公開することです。

于 2012-05-22T14:25:52.703 に答える
1

公開することができlabelX1、それは機能しますが、これを行うためのより良い方法があります:

http://www.codeproject.com/Articles/14122/Passing-Data-Between-Forms

于 2012-05-22T14:29:21.253 に答える
1
form2 frm2 = new form2();
((Label)frm2.Controls["labelX1"]).Text=button1.Text;
frm2.Show();
于 2015-11-10T20:54:34.047 に答える
1

あなたがしなければならない唯一の考えは、他のフォームのラベルを公開することです

例:Form1:

 public System.Windows.Forms.Label txtInfo;

次にForm2で

Form1 frm =new Form1();
frm.txtInfo.text="....."//you have access because is public
于 2018-10-31T21:52:37.860 に答える
0

親ウィンドウのプロパティを次のコードに変更しました。

this.MdiParent.Controls["label1"].Text = "test";
于 2015-10-21T13:28:54.567 に答える
0

コードの他の場所からform2にアクセスする必要がある場合(たとえば、ボタンを押すなど)、作成したフォームのインスタンスを表示することはできません。これを解決するために、次のように参照を保持するパブリックインスタンスを作成します。

 public form2 form2_pub;

次に、それを作成した後、新しいインスタンスをパブリックインスタンスに割り当てます。

form2 frm2 = new form2();
frm2.Show();
form2_pub = frm2

これで、ルーチン全体でform2_pubを参照できます。

少なくとも私にとってはうまくいきます。

セッターでは、他のコードを実行できることを忘れないでください。たとえば、次を使用して、show_scanningをtrueに設定するだけで、別のフォームに必要なものを表示します。

  public bool show_scanning //turns on the scanning screen
    {
        set
        {
            scanning_pnl.Visible = true;
            notReady_pnl.Visible = false;
            timer1.Enabled = true;
        }
    }
于 2017-11-01T17:10:19.277 に答える
0

通常、コントローラーはプライベートです。そのため、別のフォームからアクセスすることはできません。パラメータを介してデータを渡すなどの上記の方法は非常に正しいです。もう1つの方法があります。フォームに移動しますForm2.Designer.cs

private System.Windows.Forms.Label labelX1;

'private'を'public'に変更します。これで、labelX1が外部に表示されます。

于 2018-11-21T04:18:03.700 に答える
0

別のアプローチは、ラベルまたはテキストの修飾子プロパティをpublicに変更するだけで、form1テキストボックスのコンテンツにアクセスして別のフォームにラベルを付けることができるようになります。

つまり、コードは

private void button1_click(){
    Form2 obj1 =new Form2();
    Obj1.show();
    Obj1.label1.text="welcome"+textbox1.Text;
}
于 2021-06-17T05:41:16.487 に答える
-1

例外はありますか?ラベルにテキストを設定するセッターを使用して、form2でパブリックプロパティを作成するか、labex1アクセス修飾子をパブリックにして直接設定することができます。動作するはずです。

于 2012-05-22T14:26:22.110 に答える