طريقة جيدة لإضافة مساعدة حساسة للسياق إلى تطبيق نماذج Windows الموجودة؟
-
19-09-2019 - |
سؤال
لا بد لي من إضافة أدوات تلميحات تراصك قاعدة البيانات إلى تطبيق WinForms موجود، واحدة كبيرة. C # و .NET 3.5
أرغب في تجنب الاضطرار إلى إسقاط عناصر تحكم جديدة لهذا الغرض، ويجب أن يكون المستخدم قادرا على تحرير تلميحات أدوات المساعدة.
أفضل تخمين لدي هو التفاف عناصر التحكم الحالية في نوع جديد يحتوي على خصائص جديدة، بحيث يمكنني تعيين خاصية جديدة مثل "fieldhelpname"، ويمكن أن تستخدم ذلك في الوحدة النمطية الإدارية حتى يتمكن المستخدم من تحديد الحقل بوضوح. أقوم بتعيين شاشة عرض لكل نموذج وسيتم ربط كل سجل كل إصدار من ScreenID. عند بدء تشغيل التطبيق، قم بتحميل جميع محتويات التعليمات، وعلى تحميل النموذج، والتصفية من خلال شاشة الشاشة وإضافة تلميحات الأدوات المقابلة باستخدام التفكير، على الأرجح.
أبحث عن اقتراحات حول كيفية القيام بهذه العملية أفضل أو لمعرفة ما إذا كان هناك أفضل الممارسات حول كيفية القيام بذلك ... لذلك يتم تقدير أي مساعدة حقا. شكرا.
المحلول 2
انتهى الأمر بإنشاء جدول قاعدة بيانات للتكوين وتحديد اسم التحكم لكل صف، ثم عناصر تحكم شاشة الحلقات بشكل متكرر لإضافة أدوات تلميحات الأدوات إذا كان اسم عنصر التحكم الحالي يطابق اسم عنصر تحكم سجل قاعدة البيانات.
نصائح أخرى
لماذا تنقل إلى هذه الأطوال؟
يمكنك إنجاز نفس الشيء مع شيء أبسط:
Private _ToolTipList As New List(Of ToolTip)
<Extension()> _
Public Function CreateForm(ByVal formType As Type) As Form
If (formType Is Nothing) Then
Throw New ArgumentNullException("formType")
End If
If (Not GetType(Form).IsAssignableFrom(formType)) Then
Throw New InvalidOperationException _
(String.Format("The type '{0}' is not a form.", formType.FullName))
End If
Dim ctor = formType.GetConstructor(New Type() {})
If (ctor Is Nothing) Then
Throw New InvalidOperationException _
(String.Format _
("The type '{0}' does not have a public default constructor.", _
formType.FullName))
End If
Dim frm As Form = ctor.Invoke(New Object() {})
Dim toolTip As New ToolTip(New Container())
LoadToolTipData(toolTip, frm)
_ToolTipList.Add(toolTip)
Return frm
End Function
Private Sub LoadToolTipData(ByVal toolTip As ToolTip, _
ByVal ctrl As Control, _
Optional ByVal parentHierarchy As String = "")
Dim currentHierarchy = parentHierarchy & "." & ctrl.Name
Dim toolTipText = LoadDataFromDb(currentHierarchy)
If Not String.IsNullOrEmpty(toolTipText) Then
toolTip.SetToolTip(ctrl, toolTipText)
End If
For Each c As Control In ctrl.Controls
LoadToolTipData(toolTip, c, currentHierarchy)
Next
End Sub
Private Function LoadDataFromDb(ByVal key As String) As String
Return String.Empty
End Function