0

TextBoxform1.csファイルの別のカスタムクラスでオブジェクト(textBox1など)を参照するにはどうすればよいですか?

myclass、私は を書きましたtextBox1が、intelliSense は私にそれを提案しませんでした。プライベートからパブリックに変更しても解決しません。

これがform1.csのサンプルコードです

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

        class myclass {
            // What can I do to make texbox1 show up in intelliSense here? 
            // textBox1
        }

        public System.Windows.Forms.TextBox textBox1;
    }
}
4

2 に答える 2

4

のスコープで直接参照する場合はmyClass、静的として宣言します。

または、 のインスタンスが必要ですがForm1、クラス定義スコープでそれへの参照を宣言することはできません。Form1のメンバーに割り当てることができるコンストラクター (または型初期化子) でのインスタンスをインスタンス化する必要がありますmyClass

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

        class myclass {
            TextBox textBox3=Form1.textBox1;
            TextBox textBox4;
            Form1 form1;

            public myclass() {
                form1=new Form1();
                textBox4=form1.textBox2;
            }
        }

        static public System.Windows.Forms.TextBox textBox1;
        public System.Windows.Forms.TextBox textBox2;
    }
}

アップデート:

の現在のインスタンスに関してはForm1、インスタンス化時に現在のインスタンスを渡すさまざまな方法の 1 つを次に示します。myclass

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

            textBox1=textBox2; // demonstration for "static make sense"

            var x=new Form1.myclass {
                form1=this
            };

            // now x.textBox3 is reference to textBox2
        }

        public class myclass {
            TextBox textBox3=Form1.textBox1;
            TextBox textBox4;
            internal Form1 form1;

            public myclass() {
                // form1=new Form1();
                textBox4=form1.textBox2;
            }
        }

        static public System.Windows.Forms.TextBox textBox1;
        public System.Windows.Forms.TextBox textBox2;
    }
}
于 2013-03-15T00:40:54.207 に答える
3

ネストされた型は、それを含む型との静的な関係を持ちます。つまり、既定では、含まれる型の特定のインスタンスにはアクセスできません。内側の型が含まれている型のフィールドにアクセスできるようにする場合は、インスタンスを内側の型に渡す必要があります。最も一般的な方法は、ネストされた型のコンストラクターにインスタンスを渡すことです。

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

    class myclass {
        private Form1 parent;

        public myclass(Form1 parent) {
            this.parent = parent;
        }

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

    public System.Windows.Forms.TextBox textBox1;
}
于 2013-03-15T00:46:47.177 に答える