修飾子を public から internal に変更します。.Net は、プロジェクトからメソッド/プロパティ/コントロールへの不正なアクセスを防止するため、public ではなく private 修飾子を意図的に使用します。実際、 public 修飾子はどこからでもアクセスできるため、非常に危険です。プロジェクト外のすべてのボディが、メソッド/プロパティにアクセスできます。ただし、内部修飾子では、ボディ (現在のプロジェクトの他のもの) はメソッド/プロパティにアクセスできません。
いくつかの秘密のフィールドを持つプロジェクトを作成しているとします。したがって、これらのフィールドがプロジェクトからアクセスできる場合、それは危険であり、最初のアイデアに反する可能性があります. 良い推奨事項の 1 つとして、public 修飾子の代わりに internal 修飾子を常に使用すると言えます。
しかし、いくつかの奇妙な!
私たちのメソッド/プロパティはまだプライベートですが、VB.Netでも通知する必要があります.formを変数として呼び出すことで、他のフォーム/クラスからアクセスできますが、他に問題はありません。
このプログラミング言語の動作が C# と異なる理由がわかりません。両方とも同じプラットフォームを使用しており、ほぼ同じバックエンド プラットフォームであると主張していますが、ご覧のとおり、動作は異なります。
しかし、私はこの問題を2つのアプローチで解決しました。また; インターフェイスを使用する (ご存知のように、これはお勧めできません。通常、インターフェイスには public 修飾子が必要であり、public 修飾子を使用することはお勧めしません (上で説明したように))、
または
フォーム全体を静的クラスと静的変数のどこかに宣言しますが、内部修飾子がまだあります。次に、そのフォームをユーザーに表示するために使用すると思われる場合は、新しいForm()
構築をその静的クラス/変数に渡します。今では、どこからでも好きなようにアクセスできます。しかし、まだ何かが必要です。フォームの Designer ファイルでも要素の内部修飾子を宣言します。フォームが開いている間は、どこからでもアクセスできます。それはあなたのために非常にうまくいくことができます。
この例を検討してください。
Form の TextBox にアクセスするとします。
したがって、最初の仕事は、静的クラスでの静的変数の宣言です (静的の理由は、将来新しいキーワークを使用せずに簡単にアクセスできるようにするためです)。
次に、他のフォームからアクセスされると想定されるそのフォームのデザイナー クラスに移動します。その TextBox 修飾子の宣言を private から internal に変更します。心配しないで; .Net は、変更後にプライベート修飾子に再度変更することはありません。
3番目に、そのフォームを呼び出して開く場合は、新しいフォーム構築をその静的変数-->>静的クラスに渡します。
第4; Fromが開いている間、他のフォームから(プロジェクト内のどこからでも)そのフォーム/コントロールにアクセスできます。
以下のコードを見てください (3 つのオブジェクトがあります。1- 静的クラス (この例では という名前を付けていますA
)
2 - 最終的なフォームを開きたいその他のフォーム (この例では TextBox がありますFormB
)。
3 - 開く必要がある実際のフォームであり、その内部にアクセスすると仮定しますTextBox1
(この例ではFormC
)。
以下のコードを見てください。
internal static class A
{
internal static FormC FrmC;
}
FormB ...
{
'(...)
A.FrmC = new FormC();
'(...)
}
FormC (Designer File) . . .
{
internal System.Windows.Forms.TextBox TextBox1;
}
FormC
その静的変数 (こちら) とその内部コントロール (こちらTextbox1
) にいつでもどこでもアクセスできますFormC
。
コメント/アイデアがあれば教えてください。このトピックについてあなたや他の団体からもっと聞いてうれしい. 正直なところ、私は過去にこの言及された問題に関していくつかの問題を抱えていました. 最善の方法は、うまくいくことを願っている2番目の解決策でした。新しいアイデア/提案があれば教えてください。