LabelX1というラベルがあります。これはform2にあります。form1にはボタンがあります。ボタンのテキストを他のフォームのラベルに転送したい。私が試してみました
form2 frm2 = new form2();
frm2.labelX1.Text = this.button1.text;
しかし、それは機能しません。これを行うための簡単で簡単な方法はありますか?
ラベルまたはそのプロパティを公開する必要があります。
フォーム2:
public string LabelText
{
get
{
return this.labelX1.Text;
}
set
{
this.labelX1.Text = value;
}
}
次に、次のことができます。
form2 frm2 = new form2();
frm2.LabelText = this.button1.text;
Form2のコンストラクターは次のように変更できます。
public Form2(string labelText)
{
InitializeComponent();
this.labelX1.Text = labelText;
}
次に、テキストを渡すForm2を作成します。
Form2 frm2 = new Form2(this.button1.text);
またはあなたはこれを行うことができます>>
((Label)frm2.Controls["labelX1"]).Text = "test";
form2の中にこれを書いてください
public void ChangeLabel(string s)
{
labelX1.Text = s;
}
次に、フォーム2を作成する場所でこれを行います
form2 frm2 = new form2();
frm2.ChangeLabel(this.button1.text);
これを行うための簡単で簡単な方法はありますか?
最も簡単な方法は、labelX1をform2のパブリックメンバーにすることです。あなたが抱えている問題は、Form1コードからform2.labelX1が表示されないためです。form2 Designerでは、labelX1のプロパティに移動して、その可視性をpublic/internalに設定できます。
より良いアプローチは、labelX1.Textをクラス外のコードで設定できるプロパティとして公開することです。
公開することができlabelX1
、それは機能しますが、これを行うためのより良い方法があります:
http://www.codeproject.com/Articles/14122/Passing-Data-Between-Forms
form2 frm2 = new form2();
((Label)frm2.Controls["labelX1"]).Text=button1.Text;
frm2.Show();
あなたがしなければならない唯一の考えは、他のフォームのラベルを公開することです
例:Form1:
public System.Windows.Forms.Label txtInfo;
次にForm2で
Form1 frm =new Form1();
frm.txtInfo.text="....."//you have access because is public
親ウィンドウのプロパティを次のコードに変更しました。
this.MdiParent.Controls["label1"].Text = "test";
コードの他の場所から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;
}
}
通常、コントローラーはプライベートです。そのため、別のフォームからアクセスすることはできません。パラメータを介してデータを渡すなどの上記の方法は非常に正しいです。もう1つの方法があります。フォームに移動しますForm2.Designer.cs
private System.Windows.Forms.Label labelX1;
'private'を'public'に変更します。これで、labelX1が外部に表示されます。
別のアプローチは、ラベルまたはテキストの修飾子プロパティをpublicに変更するだけで、form1テキストボックスのコンテンツにアクセスして別のフォームにラベルを付けることができるようになります。
つまり、コードは
private void button1_click(){
Form2 obj1 =new Form2();
Obj1.show();
Obj1.label1.text="welcome"+textbox1.Text;
}
例外はありますか?ラベルにテキストを設定するセッターを使用して、form2でパブリックプロパティを作成するか、labex1アクセス修飾子をパブリックにして直接設定することができます。動作するはずです。