تعيين مساحة الاسم لـ WinForms UserControl في VB.NET
-
09-06-2019 - |
سؤال
كيف يمكنك تحديد UserControls الخاصة بك على أنها موجودة في مساحة اسم أسفل مساحة اسم المشروع، أي.[RootNameSpace].[SubSectionOfProgram].هل يتحكم؟
تحرير بسبب إجابة كامينك: لدي أيضًا قيد يتمثل في أنني يجب أن أحصل على كل التعليمات البرمجية في مشروع واحد.
تحرير لإنهاء السؤال: كما كنت أظن أنه ليس من الممكن القيام بما طلبته لذا فإن إجابة كامينك هي الحل الأقرب.
المحلول
لست متأكدًا مما إذا كان هذا هو ما تطلبه، ولكن هذه هي الطريقة التي نقوم بها بذلك.
نقوم بمساحة الاسم لجميع مشاريعنا بطريقة متسقة، ولا تختلف عناصر تحكم المستخدم.نحن أيضًا نستخدم مساحة الاسم من خلال نافذة إعدادات المشروع، على الرغم من أنه يمكنك القيام بذلك من خلال مجموعة من نافذة المشروع وفي التعليمات البرمجية.
يحصل كل حل على مساحة اسم مثل هذا:
[CompanyName].[SolutionName].[ProjectName]
لذلك، عادةً ما تكون عناصر تحكم المستخدم لدينا في مشروع يسمى "عناصر التحكم"، والذي سيكون له مساحة اسم:
OurCompany.ThisSolution.Controls
إذا كانت لدينا عناصر تحكم قد تشمل عدة حلول مختلفة، فسنقوم فقط بتخصيص مساحة الاسم كما يلي:
OurCompany.Common.Controls
بعد ذلك، في الكود الخاص بنا سنقوم باستيراد المكتبة، أو إضافة المشروع إلى الحل.
Imports OurCompany
Imports OurCompany.Common
Imports OurCompany.Common.Controls
نقوم أيضًا بتسمية المجلدات التي تعيش فيها المشاريع بنفس مساحة الاسم، وصولاً إلى اسم الشركة ولكن دون تضمينه (من المفترض أن تكون جميع الحلول في مساحة اسم الشركة):
\المشاريع
\المشاريع\MySolution
\المشاريع\MySolution\Controls
-- أو --
\المشاريع\
\المشاريع\المشتركة
\المشاريع\المشتركة\التجميعات
\المشاريع\المشترك\عناصر التحكم
إلخ.
امل ان يساعد...
نصائح أخرى
إذا كنت لا تريد أن تكون عناصر التحكم في مشروع منفصل، فيمكنك فقط إضافة الكلمة الأساسية لمساحة الاسم إلى أعلى ملف التعليمات البرمجية.على سبيل المثال، لقد قمت بشيء من هذا القبيل في العديد من المشاريع:
Imports System.ComponentModel
Namespace Controls
Friend Class FloatingSearchForm
'Your code goes here...
End Class
End Namespace
لن تتمكن من تحديد أن عناصر التحكم موجودة في مساحة اسم جذر مختلفة عن تلك المحددة للمشروع الذي تعد جزءًا منه.سيقوم VB ببساطة بإلحاق كل ما تحدده لمساحة الاسم بمساحة الاسم المحددة في نافذة خصائص المشروع.لذا، إذا كان مشروعك بأكمله هو "AcmeCorporation.WidgetProgram" وقمت بإضافة "Namespace Controls" إلى أعلى ملف التحكم، فسيكون عنصر التحكم في مساحة الاسم "AcmeCorporation.WidgetProgram.Controls".ليس من الممكن جعل عنصر التحكم يظهر في مساحة الاسم "AcmeCorporation.SomeOtherProgram.Controls".
لاحظ أيضًا أنه إذا كنت تستخدم المصمم لتحرير عناصر التحكم الخاصة بك، فستحتاج إلى إضافة الكلمة الأساسية لمساحة الاسم إلى الفئة الجزئية المخفية التي أنشأها المصمم.انقر فوق الزر "إظهار كافة الملفات" في مستكشف الحلول، ثم انقر فوق سهم التوسيع بجوار عنصر التحكم الخاص بك.يجب أن تشاهد ملف "*.Designer.vb" مدرجًا.أضف مساحة الاسم إلى هذا الملف أيضًا.سيحترم المصمم هذا التعديل، ويجب الآن تجميع مشروعك دون أخطاء.من الواضح أن مساحة الاسم المحددة في فئة المصمم الجزئية يجب أن تكون هي نفسها المحددة في ملف صفك!بالنسبة للمثال أعلاه:
Namespace Controls
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class FloatingSearchForm
'Designer generated code
End Class
End Namespace
هل تقصد أنك تريد أن تكون قادرًا على الوصول إلى عناصر تحكم المستخدم في وقت التشغيل (في الكود) عبر
[ProjectNamespace].[YourSpecialNamespace].Controls
بدلا من الافتراضي
[ProjectNamespace].Controls
؟لأنني لا أعتقد أن ذلك ممكن.إذا لم أكن مخطئا، فإن Controls
مجموعة مشروعك/تطبيقك مدمجة في إطار العمل - ولا يمكنك تغييرها.يمكنك، كما أشار كامينك، استخدام نافذة إعدادات المشروع (أو الكود) لوضع عناصر التحكم نفسها في مساحة اسم محددة على النحو التالي:
Namespace [YourSpecialNamespace]
Public Class Form1
[...]
End Class
End Namespace
بالطبع، بالتفكير في الأمر أكثر، أفترض أنه يمكنك تصميم وبناء تصميمك الخاص Controls
المجموعة الموجودة في مساحة الاسم الخاصة بك - ربما كغلاف للمجموعة المضمنة ...