سؤال

ولدي تحكم TreeView تظهر TreeNodes متعددة في التسلسل الهرمي المنظمة. أريد أن يتوقف المستخدم اختيار أعلى مستوى العقد (وقد تحقق ذلك باستخدام الحدث BeforeSelect). وأود أيضا أن وقف TreeView من تسليط الضوء على العقد مستوى أعلى إذا كان المستخدم يختار لهم أي وقف TreeView من تغيير لون الخلفية من العقدة و 'اختيار' ذلك.

وتريفيف أن أستخدمه هو إصدار WinForms عناصر من عنصر التحكم.

وفيما يلي هو رمز مصدر أنا تحاول حاليا لاستخدام:

private void tree_BeforeSelect ( object sender, TreeViewCancelEventArgs e )
{
    if ( e.Node.Level == 0 )
    {
        e.Cancel = true;
    }
}

وهذا لا اجتثاث حدد عقدة ولكن فقط بعد ومضة noticible (~ 200MS) وهو غير مرغوب فيه.

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

المحلول

وبالإضافة إلى التعليمات البرمجية الموجودة إذا قمت بإضافة معالج إلى الحدث MouseDown على تريفيف مع رمز وحدد عقدة من استخدامه الدولة، ثم يمكنك تعيين العقد الألوان.

private void treeView1_MouseDown(object sender, MouseEventArgs e)
{
    TreeNode tn = treeView1.GetNodeAt(e.Location);
    tn.BackColor = System.Drawing.Color.White;
    tn.ForeColor = System.Drawing.Color.Black;
}

لا يزال هناك مشكلة بسيطة في أن حدد الخطوط العريضة لا يزال يظهر على MouseDown ولكن أتلست توقف خلفية زرقاء ويحصل لك أبعد قليلا.

وHTH

وOneSHOT

نصائح أخرى

وهذا الرمز يمنع رسم التحديد قبل أن يتم إلغاؤها:

private void treeView1_MouseDown(object sender, MouseEventArgs e)
{
    treeView1.BeginUpdate();
}

private void treeView1_MouseUp(object sender, MouseEventArgs e)
{
    treeView1.EndUpdate();
}

إذا تم إلغاء اختيار طريق وضع الغاء إلى true في وسائط الحدث BeforeSelect، ولن يتم اختيار العقدة، وبالتالي فإن لون الخلفية لن تتغير.

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