سؤال

هل هناك طريقة متعرجية لتعيين نص إضافي للظهور في تلميح الأدوات عندما يتم الاحتفاظ بالماوس للمستخدم على عنصر في صندوق checkedBox؟

ماذا أود توقع لتكون قادرًا على القيام في الكود:

uiChkLstTables.DisplayOnHoverMember = "DisplayOnHoverProperty"; //Property contains extended details

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

شكرا مقدما.

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

المحلول

أضف كائن تلميح الأدوات إلى النموذج الخاص بك ثم أضف معالج حدث لـ checkedListbox.mousehover الذي يطلق على طريقة showtooltip () ؛ أضف حدث mousemove من checkedListbox الذي يحتوي على الكود التالي:

//Make ttIndex a global integer variable to store index of item currently showing tooltip.
//Check if current location is different from item having tooltip, if so call method
if (ttIndex != checkedListBox1.IndexFromPoint(e.Location))
                ShowToolTip();

ثم قم بإنشاء طريقة العرض:

private void ShowToolTip()
    {
        ttIndex = checkedListBox1.IndexFromPoint(checkedListBox1.PointToClient(MousePosition));
        if (ttIndex > -1)
        {
            Point p = PointToClient(MousePosition);
            toolTip1.ToolTipTitle = "Tooltip Title";
            toolTip1.SetToolTip(checkedListBox1, checkedListBox1.Items[ttIndex].ToString());

        }
    }

نصائح أخرى

بالتناوب ، يمكنك استخدام أ ListView مع مربعات الاختيار بدلاً من ذلك. هذا السيطرة لهامدمج الدعم ل تلميحات الأدوات.

مفتعلة أم لا ؛ هذا ما يوجد ...

لست على دراية بالطريقة الأسهل مما وصفته بالفعل (على الرغم من أنني ربما أعيد استخدام مثيل تلميح الأدوات ، بدلاً من إنشاء جديد طوال الوقت). إذا كان لديك مقالات تُظهر ذلك ، فاستخدمها - أو استخدم عنصر تحكم في الطرف الثالث يدعم هذا أصلاً (لا شيء إلى الذهن).

أود التوسع في إجابة فيرمين من أجل جعل حله الرائع أكثر وضوحًا.

في النموذج الذي تعمل فيه (على الأرجح في ملف .designer.cs) ، تحتاج إلى إضافة معالج أحداث Mousemove إلى قائمة CheckedListbox (اقترح Fermin في الأصل معالج حدث Mousehover ، لكن هذا لم ينجح بالنسبة لي).

this.checkedListBox.MouseMove += new System.Windows.Forms.MouseEventHandler(this.showCheckBoxToolTip);

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

private ToolTip toolTip1;
private int toolTipIndex;

أخيرًا ، تحتاج إلى تنفيذ طريقة showcheckboxtooltip (). تشبه هذه الطريقة إجابة Fermin ، إلا أنني قمت بدمج طريقة رد اتصال الحدث مع طريقة ShowToolTip (). أيضا ، لاحظ أن أحد معلمات الطريقة هو mouseeventargs. وذلك لأن سمة mousemove تتطلب mouseeventhandler ، والتي توفر بعد ذلك mouseeventargs.

private void showCheckBoxToolTip(object sender, MouseEventArgs e)
{
    if (toolTipIndex != this.checkedListBox.IndexFromPoint(e.Location))
    {
        toolTipIndex = checkedListBox.IndexFromPoint(checkedListBox.PointToClient(MousePosition));
        if (toolTipIndex > -1)
        {
            toolTip1.SetToolTip(checkedListBox, checkedListBox.Items[toolTipIndex].ToString());
        }
    }
}

قم بالتشغيل من خلال ListItems الخاص بك في قائمة خانة الاختيار الخاصة بك من العناصر وقم بتعيين النص المناسب كعنوان "عنوان" العنصر ، وسيتم عرضه على ...

foreach (ListItem item in checkBoxList.Items)
                { 
                    //Find your item here...maybe a switch statement or
                    //a bunch of if()'s
                    if(item.Value.ToString() == "item 1")
                    {
                        item.Attributes["title"] = "This tooltip will display when I hover over item 1 now, thats it!!!";
                    }
                    if(item.Value.ToString() == "item 2")
                    {
                        item.Attributes["title"] = "This tooltip will display when I hover over item 2 now, thats it!!!";
                    }
                }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top