C# - TreeView: إدراج العقدة في موضع معين
سؤال
كيف يمكن للمرء إدراج طفل جديد إلى عقدة معينة في TreeView في C# winforms؟
لقد طعنت بشكل خرقاء في TreeViews لمدة ساعة تقريبًا وأرغب في استخدام TreeView من C#مثل هذا:
treeView.getChildByName("bob").AddChild(new Node("bob's dog"));
إليك ما جربته أخيرًا (والذي أعتقد أنه على مستوى من الشعر الذي لم يكن يجب أن يسمح لي بالوصول إلى):
tree.Nodes[item.name].Nodes.Add(new TreeNode("thing"));
وغني عن القول ، إنه لا يعمل.
أوه ، وهنا سؤال كسول: هل يمكنك بالفعل تخزين الكائنات في هذه العقد؟ أم أن Treenode يدعم السلاسل فقط وما إلى ذلك؟ (في هذه الحالة يجب أن أمتد treenode .. /تنهد)
الرجاء المساعدة ، شكرا!
المحلول
في الواقع ، يجب أن يعمل الرمز الخاص بك - من أجل إضافة عقدة فرعية عليك القيام بها فقط:
myNode.Nodes.Add(new TreeNode("Sub node"));
ربما تكون المشكلة في طريقة الرجوع إلى العقد الموجودة لديك. أنا أظن أن الشجرة.
لكي يجد هذا المفهرس العقدة ، تحتاج إلى تحديد مفتاح عند إضافة العقدة. هل حددت اسم العقدة كمفتاح؟ على سبيل المثال ، الرمز التالي يعمل بالنسبة لي:
treeView1.Nodes.Add("key", "root");
treeView1.Nodes["key"].Nodes.Add(new TreeNode("Sub node"));
إذا لم تنجح إجابتي ، فهل يمكنك إضافة المزيد من التفاصيل حول ماذا يحدث؟ هل حصلت على بعض الاستثناء أم لم يحدث شيء ببساطة؟
PS: من أجل تخزين كائن في عقدة ، بدلاً من استخدام خاصية TAG ، يمكنك أيضًا استخلاص فئة خاصة بك من TreeNode وتخزين أي شيء فيه. إذا كنت تقوم بتطوير مكتبة ، فهذا أكثر فائدة لأنك تترك خاصية العلامة لاستخدامها.
جرى
نصائح أخرى
يمكنك استخدام إدراج بدلاً من إضافة.
tree.Nodes[item.name].Nodes.Insert(2, (new TreeNode("thing")));
حسنًا ، للبدء ، نعم يمكنك تخزين الكائنات في كل عقدة. كل عقدة لديها ملف Tag
خاصية النوع object
.
يجب أن تكون إضافة العقد واضحة إلى حد ما. وفق MSDN:
// Adds new node as a child node of the currently selected node.
TreeNode newNode = new TreeNode("Text for new node");
treeView1.SelectedNode.Nodes.Add(newNode);
وإلا إذا لم يكن دافيتا هو الإجابة المثالية ، فأنت بحاجة إلى الاحتفاظ بالإشارة إلى العقد ، لذلك إذا كان لديك إشارة إلى بوب ، فيمكنك إضافة كلب بوب
Treenode Bob = treenode new ("bob") ؛ TreeView1.Nodes.Add (Bob) ؛ bob.nodes.add (New Treenode ("Dog")) ؛