1

私はただ疑問に思っていました。2 つのフォームがあるとします。フォーム 1 とフォーム 2 で、テキスト ボックス、ラベルなどにアクセスする必要があります。たとえば、表示したり、テキストを変更したりします。

Form2 からこれらにアクセスする最良の方法はどれですか?

Form 1 のメソッドを次のように作成します。

public void setTextBoxVisible(){
     textBox1.Visible = true;
}

または、フォーム 1 でアクセサーを作成し、フォーム 2 から可視性を次のように変更します。

フォーム 2:

public TextBox TextBox1 {
    get { return textBox1; }
}

フォーム 1:

Form1 form1 = new Form1();
form1.TextBox1.Visible = true;

ばかげた質問かもしれませんが、私はまだプログラミングに慣れていないので、これらのことを行うための最良の方法を知りたいと思っています. ありがとう :)

4

5 に答える 5

2

2番目のシナリオでは読み取り専用プロパティを宣言していますが、最初のアプローチでは関数を介して機能を公開していますpublic.IMOはより明確で優れたアプローチです.

編集: あなたの最初のアプローチで私が目にする問題の 1 つは、ユーザーが Visible 以外のプロパティを変更するのを止めることができないことです。ユーザー (開発者) が TextBox の Text プロパティを誤って設定することもあります。例えば

form1.TextBox1.Text = "Some new text";

上記は望ましい動作ではありません。(Visible プロパティのみを設定したい)

于 2012-12-04T12:43:47.127 に答える
2

プログラマーの好みだと思います..エラーの余地が少なく、多くのインスタンスで行うことを変更したい場合は、1 行のコードで実行できるため、私は常に方法 1 を好みます。

于 2012-12-04T12:45:08.883 に答える
2

オプション 1 は、公開したい部分のみを公開しているため、間違いなく優れています。
呼び出し側のエラーの余地を少なくするだけでなく、メソッドの意図を述べています。

オプション 2 では、コントロールのすべての側面にアクセスでき、Visibleプロパティだけでなく、外部コードから変更できます。

好みに合う場合は、プロパティを作成できます。

public bool TextBox1Visible
{
    get { return TextBox1.Visible; }
    set { TextBox1.Visible = value; }
}
于 2012-12-04T12:48:22.057 に答える
0

フォーム 1 への変更をトリガーする何らかのアクションが Form2 にあると仮定します。オプションを考えると、1 の場合に得られます。別のオプションは、イベントを考慮することです。Form1 は Form2 のイベントをサブスクライブします。トリガーされたら、必要なものを Form1 に渡して、必要な更新や変更を実行させることができます。

于 2012-12-04T12:54:07.170 に答える
0

分離されたクラスとしてデータモデルを使用します。オブザーバー / MVVM パターンを使用して、データモデルが変更されたときに通知を受け取ります。

于 2012-12-04T12:48:58.073 に答える