-2

(デフォルトのVisual Studio名を使用しています)form1.csファイル(「パブリック部分クラスForm1:Form」内のクラス)の別のカスタムクラスでtexboxオブジェクト(texbox1)を参照するにはどうすればよいですか?

これが私のコードです。myclassでtextBox1を作成しましたが、intelisenseはそれを提案しませんでした。つまり。この状況でtexbox1をインテリジェンスで表示するにはどうすればよいですか?form1.Desginer.csでプライベートをパブリックに変更しても解決されません。答えを喜ばせてください。

namespace Calculator
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent(); 
        }


        class myclass 
        {

           textBox1

        }
}
4

3 に答える 3

0

WinFormsデザイナは、デフォルトでコンポーネントをプライベートにします。理想的には、カプセル化を壊すため、コンポーネント(コントロールなど)を直接公開しないでください。次のように、共有するフィールドをプロキシする必要があります。

public partial class MyForm : Form {

    private TextBox _textbox1; // this field exists in the MyForm.designer.cs file

    // this property should be in your MyForm.cs file
    public String TextBox1Value {
        get { return _textbox1.Text; }
        set { _textbox1.Text = value; }
    }
}

そうすれば、フォーム間でデータを共有できるだけでなく、カプセル化を維持することもできます(ただし、私が選択したよりもわかりやすい名前を選択する必要がありますTextBox1Value

于 2013-03-15T00:36:53.457 に答える
0

ネストされたクラスでは、参照しているクラスのインスタンスmyclass指定しません。の特定のインスタンスへの参照を追加すると、そのメンバーにアクセスできるようになります。Form1Form1textBox1

通常、これは次のように実行できます。

class myclass
{
    public myclass(Form1 owner)
    {
        if (owner == null) {
            throw new ArgumentNullException("owner");
        }

        this.owner = owner;
    }

    private readonly Form1 owner;

    public void DoSomething()
    {
        owner.textBox1.Text = "Hello, world!";
    }
}

このコードは、このような状況で使用されるさまざまなパターンを使用します。

  • ownerコンストラクターで設定されるため null
  • これに追加するとnull、コンストラクターによって拒否されます
  • ownerメンバーはであるため、特定のインスタンスreadonlyの存続期間中は変更されないと言っても過言ではありません。myclass

のメソッド内で、を呼び出すことにより、現在のインスタンスにリンクされForm1たインスタンスを作成できます。myclassForm1new myclass(this)

于 2013-03-15T00:37:02.397 に答える
0

ネストされたクラスでクラスの一部として参照することはForm1できません。参照を渡す必要があります。

例:

class myclass 
{
    public TextBox MyTextBox { get; set; }

    public MyClass(TextBox textbox)
    {
        MyTextBox = textbox;
    }
}

次に、インスタンスをForm1作成したクラスで、MyClassインスタンスを渡すことができますTextBox

MyClass myClass = new MyClass(this.textBox1);
于 2013-03-15T00:39:15.400 に答える