現在の名前空間に追加されたすべてのユーザー定義コントロールのリストを取得するにはどうすればよいですか? 私はC#2010を使用しています。現在の名前空間からユーザー定義コントロールのリストを取得
答えて
:
public static class ControlsFinder
{
public static List<Type> FindControls(Assembly controlsLibrary,
string rootNamespace, bool includeNestedTypes = true)
{
var parent = typeof(UserControl);
return controlsLibrary.GetTypes()
.Where(t => (includeNestedTypes
? t.FullName.StartsWith(rootNamespace)
: t.FullName.Equals($"{rootNamespace}.{t.Name}"))
&& parent.IsAssignableFrom(t))
.ToList();
}
}
使用例:あなたが名前だけをしたい場合は
var controls = ControlsFinder.FindControls(Assembly.GetExecutingAssembly(), "WinFrm");
はあなたがcontrols
からそれらを選択することができ、このコードを試してみてください私のプロジェクトで定義されたコントロールを作成し、自分のフォーム上の名前でUser-defined Controlのインスタンスを作成します。
var assemblies = AppDomain.CurrentDomain.GetAssemblies(); // Get my CurrentDomain Object
Assembly myType = Assembly.GetExecutingAssembly(); // Extract list of all references in my project
foreach (var assembly in assemblies) // Search for the library that contains namespace that have needed controls
{
if (assembly.GetName().ToString().ToUpper().IndexOf("FIBACONTROLS") > -1)
{
myType = assembly; // Get All types in the library
List<Type> myTps = myType.GetTypes().ToList();
Type mT = null;
foreach (Type selType in myTps) // Find the type that refer to needed user-defined control
{
if (selType.Name.ToUpper() == "FIBACOLORPICKER")
{
mT = selType;
break;
}
}
if (mT == null)
return;
object myInstance = Activator.CreateInstance(mT); // Created an instance on the type
Control mFib = (Control)myInstance; // create the control's object
mFib.Name = "Hahah"; // add the control to my form
mFib.Left = 100;
mFib.Top = 200;
mFib.Visible = true;
this.Controls.Add(mFib);
break;
}
}
私はそれを記述するコードにいくつかのコメントを追加してみます。
それはうまくいく方法がありますが、私はC#で新しいものです。私が見つけた解決策は最高ではないと確信しています。
リフレクションを使用できます。私はすべてのユーザーのリストを抽出することができ、これらの方法では
var names = controls.Select(t => t.Name).ToArray();
どこが間違っているのか分かりません。私はユーザー定義のコントロールを作成し、私の主なアプリプロジェクトのリファレンスにそのプロジェクトを追加しました。今では、私の主なアプリプロジェクトに追加されたユーザー定義のコントロールの名前を取得することはできません。このコードは0メンバでもコントロールを返します。 – Farzin
私は答えを更新しました。 'FindControls'に正しいアセンブリを渡してください。私は 'GetExecutingAssembly'を使用しましたが、それは単なる例です –
助けてくれてありがとうございますが、うまくいきません。私は単純化されたプロジェクトをどのようにアップロードできますか? – Farzin
- 1. 現在のユーザーの名前を取得
- 2. スニペットで現在の名前空間を取得
- 3. コマンドラインからHerokuから現在のデータベースの名前を取得
- 4. 現在のアドインユーザーのユーザー名を取得
- 5. ポッドで現在の名前空間を取得する方法は?
- 6. 現在のネットワークの名前を取得
- 7. 取得名前空間
- 8. Phalcon PHPマルチモジュール名前空間の定義
- 9. 名前空間のメンバー定義
- 10. :未定義のCLR名前空間
- 11. ログインページから現在のユーザーを取得
- 12. PHPからの現在のActive Directoryユーザー名の取得
- 13. OAuthから現在のユーザー名とパスワードを取得
- 14. Game Centerから現在のユーザー名を取得する方法
- 15. Rails - Rails設定から名前空間の定数を取得する
- 16. 親フォームのユーザー定義コントロールからコントロールの値を取得する方法
- 17. clojureでは、どのようにして現在の名前空間のファイル名を取得できますか?
- 18. ProjectItemの名前空間の取得
- 19. ロガーの現在の名前空間、クラス名、メソッド名の取得を最適化する方法
- 20. 複数定義と名前空間
- 21. 取得のXMLElementのOracle XMLTABLEから名前空間
- 22. ipythonのモジュールから現在の名前空間にすべてをインポートする
- 23. ElementTreeを持つXML文書の名前空間定義をリストしますか?
- 24. C++名前(匿名)名前空間定義
- 25. コンパイル済みの型を現在の名前空間型にキャスト
- 26. 名前空間と非名前空間XMLを混在させて値を取得する方法
- 27. 異なるアセンブリ内のシステム名前空間型とユーザー定義型の間の名前の競合
- 28. 現在の名前空間に関数をインポート
- 29. パッケージを現在の名前空間にロード
- 30. clojure:現在の名前空間に到達可能なすべての名前をリストする方法は?
試しましたか?反射について読む? –
はい私は試みた。コントロールは名前空間に追加され、名前空間はオブジェクトではありません。私は名前空間からユーザ定義のコントロールのリストを抽出できませんでした。 – Farzin