الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة في treeView؟

مغلق
بدأه musa في 30 سبتمبر 2004 · 6 رد · 946 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السؤال الاول:

لدي مشكلة في الكود التالي حيث انني عندما اقوم باستدعاء الدالة في حدث ال load الخاص بالفورم فإنها تظهر المشكلة, اما في حالة استدعاءها في حدث ال click الخاص بالزر فانها لا تظهر اي مشكلة؟

  private void treeBuild()
  {
 	 //Clears the nodes everytime the form loads
 	 treeView1.Nodes.Clear();

 	 SqlConnection cn = new SqlConnection("Data Source=IBB; Initial Catalog=testProcess; User ID=sa; Password=********");
 	 SqlCommand cmdgroups=new SqlCommand("select groupId, groupName from groups",cn);
 	 //To open the database connection
 	 cmdgroups.Connection.Open();
 	 //Adds  data to the datareader dr;
 	 SqlDataReader myReader=cmdgroups.ExecuteReader(CommandBehavior.CloseConnection);

 	 //Add "Groups and Users" Lable as the root node
 	 treeView1.Nodes.Add("Groups and Users");
 	 treeView1.TopNode.Tag="root";
 	 //treeView1.ShowRootLines=false;
 	 //Adds the image
 	 treeView1.TopNode.ImageIndex = 0;
 	 treeView1.TopNode.SelectedImageIndex = 0;

 	 //Add Nodes to the tree from DataReader
 	 while(myReader.Read())
 	 {
    //Represents a node of a TreeView.
    TreeNode node      = new TreeNode();
    //Adds groupName to the tag
    //node.Tag	= myReader.GetValue(0).ToString(); 
    node.Tag = "group";
    node.Text	= myReader.GetString(1);
    node.ImageIndex=1;
    node.SelectedImageIndex=1;
    treeView1.TopNode.Nodes.Add(node);

    buildChildren( node );

    //treeView1.ExpandAll();
    treeView1.TopNode.Expand();
 	 }    
 	 //Closes the datareader
 	 myReader.Close();
 	 //Closes the connection
 	 cmdgroups.Connection.Close();
  }

  private void buildChildren( TreeNode parent )
  {
 	 SqlConnection cn = new SqlConnection("Data Source=IBB; Initial Catalog=testProcess; User ID=sa; Password=*******");
 	 SqlCommand cmdgroups=new SqlCommand("select userName from users where userGroup=(select groupId from groups where groupName='"+parent.Text+"')",cn);
 	 //To open the database connection
 	 cmdgroups.Connection.Open();
 	 //Adds  data to the datareader dr;
 	 SqlDataReader myReader=cmdgroups.ExecuteReader(CommandBehavior.CloseConnection);
 	 while(myReader.Read())
 	 {
    //Adds userName to the tag
    //parent.ImageIndex=3;
    //parent.SelectedImageIndex=4;
    parent.Tag="user";
    //parent.Text=myReader["userName"].ToString();
    parent.Nodes.Add(myReader["userName"].ToString());

 	 }
 	 //Closes the datareader
 	 myReader.Close();
 	 //Closes the connection
 	 cmdgroups.Connection.Close();
  }

السؤال الثاني

في الدالة الاولى اريد اعطاء

    node.Tag = "group";
    node.Text	= myReader.GetString(1);

وفي الدالة الثانية اريد اعطاء

    parent.Tag="user";
    parent.Nodes.Add(myReader["userName"].ToString());

ولكن الذي يحدث بان نفس القيمة لل node.tag تعطى لكلتا الدالتين؟

السؤال الثالث:

كيف استطيع اخذ قيمة ال node.Tag و node.Text لل node التي اقوم بالضغط عليها بيمين الماوس؟

#2
musa كتب:
السؤال الاول:

لدي مشكلة في الكود التالي حيث انني عندما اقوم باستدعاء الدالة في حدث ال load الخاص بالفورم فإنها تظهر المشكلة

ما هي المشكلة التي تقصدها ؟؟؟؟؟؟؟؟؟؟

وحدن بيبقو متل زهر البيلسان وحدهن بيقطفو وراق الزمان

بيسكرو الغابي بيضلهن متل الشتي يدقوا على بوابي على بوابي

يا زمان يا عشب داشر فوق هالحيطان ضويت ورد الليل عكتابي

برج الحمام مسور و عالي هج الحمام بقيت لحالي لحالي

يا ناطرين التلج ما عاد بدكن ترجعو صرخ عليهن بالشتي يا ديب بلكي بيسمعو

http://www.mazikana.com/Songs/F/Fayrouz/mp...uz---Wahdon.mp3

#3

عفوا لعدم توضيح المشكلة:

المشكلة هي انه عند استدعاء الدالة في حدث ال load الخاص بالفورم فإن الخطاء يحدث اثناء run time ولا يتنفذ البرنامج.

ويكون الخطاء ظاهر بلون اخضر على الجمل التالية على التوالي:

  treeView1.TopNode.Tag="root";
  //treeView1.ShowRootLines=false;
  //Adds the image
  treeView1.TopNode.ImageIndex = 0;
  treeView1.TopNode.SelectedImageIndex = 0;

وعندما اقوم بمنع الجملة من العمل فإن الخطاء ينتقل للجملة التي تليها وهكذا؟

تم تعديل هذه المشاركة بواسطة musa في 1 أكتوبر 2004 في 02:13

#4

بالطبع ان المعلومات التي ذكرتها الان مفيدة. ولكن هناك شيئ اخر يساعد كثيرا في معرفة الخطأ. وهو اسم الـ exception

أي انه عندما يتنفذ البرنامج ويظهر الخطأ ففانه يتم ذكر اسم الاكسبشن ايضا.

فما هي رسالة الخطأ التي تظهر ؟

تم تعديل هذه المشاركة بواسطة DotNetExpert في 1 أكتوبر 2004 في 09:19

وحدن بيبقو متل زهر البيلسان وحدهن بيقطفو وراق الزمان

بيسكرو الغابي بيضلهن متل الشتي يدقوا على بوابي على بوابي

يا زمان يا عشب داشر فوق هالحيطان ضويت ورد الليل عكتابي

برج الحمام مسور و عالي هج الحمام بقيت لحالي لحالي

يا ناطرين التلج ما عاد بدكن ترجعو صرخ عليهن بالشتي يا ديب بلكي بيسمعو

http://www.mazikana.com/Songs/F/Fayrouz/mp...uz---Wahdon.mp3

#5

الآن استطيع فقط ان أخمن أن الخطا بسبب عدم تعريف التري فيو

تاكد فقط ان الكود التالي ينفذ قبل treeBuild

treeView1 = new System.Windows.Forms.TreeView();

وحدن بيبقو متل زهر البيلسان وحدهن بيقطفو وراق الزمان

بيسكرو الغابي بيضلهن متل الشتي يدقوا على بوابي على بوابي

يا زمان يا عشب داشر فوق هالحيطان ضويت ورد الليل عكتابي

برج الحمام مسور و عالي هج الحمام بقيت لحالي لحالي

يا ناطرين التلج ما عاد بدكن ترجعو صرخ عليهن بالشتي يا ديب بلكي بيسمعو

http://www.mazikana.com/Songs/F/Fayrouz/mp...uz---Wahdon.mp3

#6

اضغط على الصورة المرفقة

post-57-1096861542_thumb.jpg

#7

في الحقيقة كل شي يبدو في الكود الذي كتبته على ما يرام

لقد جربت استخدامه نفسه في برنامج صغير (دون الاتصال بقاعدة البيانات)

أي كان الكود على الشكل التالي

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace TreeViewTest
{
	/// <summary>
	/// Zusammenfassung für Form1.
	/// </summary>
	public class Form1 : System.Windows.Forms.Form
	{
  private System.Windows.Forms.TreeView treeView1;
  /// <summary>
  /// Erforderliche Designervariable.
  /// </summary>
  private System.ComponentModel.Container components = null;

  public Form1()
  {
 	 //
 	 // Erforderlich für die Windows Form-Designerunterstützung
 	 //
 	 InitializeComponent();

 	 //
 	 // TODO: Fügen Sie den Konstruktorcode nach dem Aufruf von InitializeComponent hinzu
 	 //
  }

  /// <summary>
  /// Die verwendeten Ressourcen bereinigen.
  /// </summary>
  protected override void Dispose( bool disposing )
  {
 	 if( disposing )
 	 {
    if (components != null) 
    {
   	 components.Dispose();
    }
 	 }
 	 base.Dispose( disposing );
  }

  #region Vom Windows Form-Designer generierter Code
  /// <summary>
  /// Erforderliche Methode für die Designerunterstützung. 
  /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
  /// </summary>
  private void InitializeComponent()
  {
 	 this.treeView1 = new System.Windows.Forms.TreeView();
 	 this.SuspendLayout();
 	 // 
 	 // treeView1
 	 // 
 	 this.treeView1.ImageIndex = -1;
 	 this.treeView1.Location = new System.Drawing.Point(88, 56);
 	 this.treeView1.Name = "treeView1";
 	 this.treeView1.SelectedImageIndex = -1;
 	 this.treeView1.TabIndex = 0;
 	 // 
 	 // Form1
 	 // 
 	 this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
 	 this.ClientSize = new System.Drawing.Size(292, 266);
 	 this.Controls.Add(this.treeView1);
 	 this.Name = "Form1";
 	 this.Text = "Form1";
 	 this.Load += new System.EventHandler(this.Form1_Load);
 	 this.ResumeLayout(false);

  }
  #endregion

  /// <summary>
  /// Der Haupteinstiegspunkt für die Anwendung.
  /// </summary>
  [STAThread]
  static void Main() 
  {
 	 Application.Run(new Form1());
  }
  private void Build()
  {
 	 //Clears the nodes everytime the form loads
 	 treeView1.Nodes.Clear();
 	 //Add "Groups and Users" Lable as the root node
 	 treeView1.Nodes.Add("Groups and Users");
 	 treeView1.TopNode.Tag="root";
 	 //treeView1.ShowRootLines=false;
 	 //Adds the image
 	 treeView1.TopNode.ImageIndex = 0;
 	 treeView1.TopNode.SelectedImageIndex = 0;
  }

  private void Form1_Load(object sender, System.EventArgs e)
  {
 	 Build();
  }
	}
}

وكان كل شي على ما يرام. سوف اضمن الملف التنفيذي في هذا البوست.

ان الاكسبشن الذي يظهر يقول ان الكائن TopNode غير معرف وهذا غريب لأنه يعرف مباشرة بعد تنفيذ السطر treeView1.Nodes.Add("Groups and Users");

قد يكون هناك شي اخر في الكود غير مكتوب هنا يسبب هذه المشكلة. وضع ملف البرنامج كاملا هنا قد يفيد بمعرفة مكان المشكلة.

لكنك كتجربة تستطيع استبدال السطر

treeView1.TopNode.Tag="root";

ب

treeView1.Nodes[0].Tag="root";

السؤال الثاني يحتاج ايضا البرنامج كاملا

السؤال الثالث

بما ان ال treeview ليس لديه rightclick فيجب الاجراء التالي

private void TreeView1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (e.MouseButtons == MouseButtons.Right)
{
TreeNode node  = TreeView1.GetNodeAt(e.X, e.Y);

// Update the context menu text here
}
}

TreeViewTest.exe

وحدن بيبقو متل زهر البيلسان وحدهن بيقطفو وراق الزمان

بيسكرو الغابي بيضلهن متل الشتي يدقوا على بوابي على بوابي

يا زمان يا عشب داشر فوق هالحيطان ضويت ورد الليل عكتابي

برج الحمام مسور و عالي هج الحمام بقيت لحالي لحالي

يا ناطرين التلج ما عاد بدكن ترجعو صرخ عليهن بالشتي يا ديب بلكي بيسمعو

http://www.mazikana.com/Songs/F/Fayrouz/mp...uz---Wahdon.mp3

هذا الموضوع مغلق.

مواضيع مشابهة