3

Form1.csの変数と静的クラスにアクセスする必要があるユーザーコントロールがあります。グーグルで実用的な例を見つけることができません。ヒントはありますか?ありがとう!

namespace WinApp1
{
public partial class Form1 : Form
{
    Public MyCustomClass myClass; // need to access this
    public Form1()
    {

    }
}
public static class Global {
   public static myGlobalVar; // Need to Access This
}
}
4

6 に答える 6

7

UserControlで使用this.Parentして、親フォームを取得します。

Form1 myParent = (Form1)this.Parent;

次に、パブリックフィールド/プロパティにアクセスできます:

myParent.myClass 

UserControlがフォーム内のパネルに配置されている場合は、親の親を取得する必要があることに注意してください。

静的クラスには、その名前でアクセスできます。

Global.myGlobalVar 
于 2013-02-17T13:12:27.513 に答える
5

FindForm()を使用できます

ただし、一歩下がって、これが最善の解決策であるかどうかを確認する必要があります。これは強い依存関係であり、コントロールの妥当性と再利用率が低下します。

たとえば、コントロールに必要なメンバーとのインターフェイスを導入して、親のhirachyで検索したり、パラメーターとして挿入したりすることを検討してください。

そこから、私の状況でコントロールを使用できます。さらに多くの解決策があるかもしれません。フォームに頼るより良いものがないかどうかを考えさせたいだけです。

于 2013-02-17T13:27:52.027 に答える
3

使用する :

frm_main frm;     //frm_main is your main form which user control is on it
frm=(frm_main)this.FindForm();     //It finds the parent form and sets it to the frm

これでメインフォームができました。frmの変更は、メインフォームに反映されます。メインフォームの指定されたコントロールにアクセスする場合は、次を使用します。

1-アクセスするタイプのコントロールを作成します(例:ラベル):

Label lbl_main;

2-検索結果から返されたコントロールでラベルを設定します。

frm.Controls.FindControl("controlId",true);

3-ラベルに変更を加えます。

lbl_main.Text="new value changed by user control";

変更はコントロールに反映されます。お役に立てば幸いです。

于 2013-07-01T06:51:58.500 に答える
1

これだと思いました。親はユーザーコントロールが配置されている実際のページを返しますか?そして、あなたは公開メンバーにアクセスします

于 2013-02-17T13:20:39.777 に答える
0

UserControlコードのClickイベントなどで:

private void sendParamToMainForm_Button_Click(object sender, EventArgs e)
{
    mainForm wForm;
    wForm = (mainForm)this.FindForm();

    wForm.lblRetrieveText.text = "whatever ...";
}

お役に立てれば :-)

于 2018-09-11T19:40:44.903 に答える
0


ユーザーコントロールがパネル内にあり、使用できるフォームにアクセスしたい場合

        Main_Form myform = (Main_Form)ParentForm;
        MessageBox.Show(myform.Label2.Text);
于 2019-04-06T14:41:58.957 に答える