سؤال

ربما أنا فقط لا أعرف .صافي جيدا بما فيه الكفاية حتى الآن ، ولكن إلى الآن لم أرى طريقة مرضية لتنفيذ هذا بسيط VB6 رمز بسهولة .صافي (تحمل هذا الرمز على شكل N CommandButtons في مجموعة Command1() و ن مربعات النص في مجموعة النص1()):

Private Sub Command1_Click(Index As Integer)

   Text1(Index).Text = Timer

End Sub

وأنا أعلم أنها ليست مفيدة جدا البرمجية ، لكنه يدل على سهولة التحكم المصفوفات يمكن استخدامها في VB6.ما هو أبسط ما يعادلها في C# أو VB.NET?

هل كانت مفيدة؟

المحلول

جعل قائمة عامة من مربعات النص:

var textBoxes = new List<TextBox>();

// Create 10 textboxes in the collection
for (int i = 0; i < 10; i++)
{
    var textBox = new TextBox();
    textBox.Text = "Textbox " + i;
    textBoxes.Add(textBox);
}

// Loop through and set new values on textboxes in collection
for (int i = 0; i < textBoxes.Count; i++)
{
    textBoxes[i].Text = "New value " + i;
    // or like this
    var textBox = textBoxes[i];
    textBox.Text = "New val " + i;
}

نصائح أخرى

آخر شيء لطيف أن VB .صافي هل هو وجود حدث واحد معالج يعالج عدة ضوابط:

Private Sub TextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _ 
        Handles TextBox1.TextChanged, _

        TextBox2.TextChanged, _

        TextBox3.TextChanged

End Sub

لا يوجد الحقيقي 1 إلى 1 التناظرية في .صافي.بالتأكيد, يمكنك جعل صفائف أو قوائم التحكم من نوع معين, ولكن لا يوجد شيء من شأنها أن تفعل ذلك بالنسبة لك تلقائيا.

ومع ذلك ، لم أر التحكم في مجموعة لا يمكن بتعميل الترميز في .صافي إلى شيء أفضل.مثال على ذلك هو المثال الخاص بك.في السيناريو الذي نشر أنت التحكم باستخدام صفائف زوج زر مع مربع نص.في .صافي, هل من المحتمل أن تفعل هذا مع التحكم المخصصة.التحكم المخصصة تتكون من زر مربع نص و ربما مشترك/ثابت الموقت.يستخدم شكل عدة حالات من هذا التحكم المخصصة.تطبيق المنطق اللازمة لمراقبة مرة و هي معزولة خاصة انها الملف المصدر الذي يمكن تتبع وتحريرها في مصدر عنصر التحكم دون الحاجة إلى دمج أكبر فئة النموذج ، أو بسهولة إعادة استخدامها في أشكال متعددة أو حتى في مشاريع متعددة.أنت أيضا لم يكن لديك ما يدعو للقلق حول التأكد من زر أمر مؤشر مباريات مع النص القياسي.

باستخدام عنصر تحكم مخصص لهذا بدلا من السيطرة على مجموعة فضفاضة مماثلة باستخدام فئة إلى مجموعة البيانات بدلا من صفيف ، في أن تحصل على أسماء بدلا من الفهارس.

هناك نوعان من الجوانب.

.صافي بسهولة تدعم المصفوفات من الضوابط ، VB6 فقط إلى استخدام الحل لأن خلاف ذلك ، يصل الأسلاك الأحداث كان من الصعب حقا.في .صافي الأسلاك تصل الأحداث بشكل ديناميكي سهل.

ومع ذلك،.صافي مصمم النموذج لا يدعم التحكم المصفوفات لسبب بسيط:صفائف من الضوابط التي يتم إنشاؤها/مدد في وقت التشغيل.إذا كنت تعرف كيف العديد من عناصر التحكم التي تحتاج إليها في وقت الترجمة (حجتهم) ثم أعطيت لهم أسماء مختلفة و لا وضعها في صفيف.

وأنا أعلم أنها ليست مفيدة جدا كود

هذا هو بالضبط نقطة.لماذا يكون ميزة إذا كان عديم الفائدة ؟

إذا لزم الأمر يمكنك أيضا الوصول إلى التحكم بالاسم ، مما أدى إلى شيء من هذا القبيل:

Private Sub Command_Click(sender As Object, e As EventArgs) Handles Command1.Click, Command2.Click …
    Dim name As String = DirectCast(sender, Control).Name
    Dim index As Integer = Integer.Parse(name.Substring("Command".Length))
    Controls(String.Format("Text {0}", index)).Text = Timer.Value.ToString()
End Sub

VisualBasic .صافي توافق يحتوي على مكتبة قوية كتبته السيطرة على المصفوفات.هذا هو ما ترقية المعالج يستخدم للاستعاضة عن الحالي VB6 السيطرة على المصفوفات.

بيد أن السيطرة على مجموعة في VB6 هو مجرد مجموعة من الكائنات مع VB6 القيام ببعض جملة السحر على السطح.في .صافي العالم ، عن طريق إزالة هذه ، فإنها تجبر أفضل الممارسات.

في الختام ، مع ظهور الأدوية ، هناك شيء يمنعك من استخدام

List<YourControl> MyControlArray.

جعل مجموعة من الضوابط.

TextBox[] textboxes = new TextBox[] {
    textBox1,
    textBox2,
    textBox3
};

نفس الحدث click يمكن التعامل مع تضغط على زر من أزرار متعددة في .صافي.ثم هل يمكن إضافة مربع النص أن تجد في الوسم الملكية ؟

Private Sub AllButton_Click(sender As Object, e As EventArgs) Handles Button1.Click, Button2.Click, Button3.Click
  Dim c As Control = CType(sender, Control)
  Dim t As TextBox = FindControl(CType(c.Tag, String))
  If t Is Not Nothing Then
     t.Text = "Clicked"
  End If
End Sub

الفوائد الرئيسية اثنين من السيطرة على المصفوفات في VB6 هي:(1) أنها وفرت طريقة تكرار خلال مجموعة من الضوابط (2) يسمح لك لتبادل الأحداث بين الضوابط

(1) يمكن أن يتحقق .صافي باستخدام مجموعة من الضوابط (2) يمكن أن يتحقق من خلال وجود حدث واحد التعامل مع عناصر تحكم متعددة (بناء الجملة هو مختلفة قليلا لأن استخدام sender الحجة بدلا من myArray(index)).

واحد الشيء الجميل .صافي هو أن هذه الميزات هي تنفصل.على سبيل المثال هل يمكن أن يكون الضوابط التي تشترك في الأحداث حتى إذا لم تكن جزءا من مجموعة أسماء مختلفة وحتى نوع مختلف.و يمكنك تكرار خلال مجموعة من الضوابط حتى لو كان لديهم مختلفة تماما الأحداث.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top