سؤال

ولدي toolstrip تحتوي، من بين أمور أخرى، ToolStripComboBox وToolStripButton. أريد أن أضيف ContextMenuStrip لكليهما، ولكن ليس لدي إمكانية الوصول المباشر إلى toolstrip أو غيرها من محتوياته، لذلك لا يمكن أن يحدد القائمة سياق toolstrip.

وضبط ContextMenuStrip لToolStripComboBox السهل:

myToolStripComboBox.ComboBox.ContextMenuStrip = myContextMenu;

ولكن ليس هناك ما يعادل واضح للToolStripButton. كيف يمكنني إضافة ContextMenuStrip إلى ToolStripButton؟

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

المحلول

وما اقترح جيف ييتس يجب أن تعمل.

ولكن، بديل آخر هو خلق الفئات المشتقة الخاصة بك (MyToolSTripButton، MyToolStripTextBox ... الخ) تعطي هذه العناصر خاصية ContextMenuStrip التي يمكنك تعيينها في وقت التصميم، ولها فصول مشتقة كشف الماوس الأيمن أسفل، أو أيا كان وغيرها من الأحداث تؤدي إلى عرض قائمة السياق.

وهذا يفرغ أي من المعارف اللازمة لتلك البنود فقط المهتمين.

وفيما يلي أحد الأمثلة على ذلك استخدام ToolStripTextBox نص المادة.

public class MyTextBox : ToolStripTextBox
{
    ContextMenuStrip _contextMenuStrip;

    public ContextMenuStrip ContextMenuStrip
    {
        get { return _contextMenuStrip; }
        set { _contextMenuStrip = value; }
    }

    protected override void OnMouseDown(MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right)
        {
            if (_contextMenuStrip !=null)
                _contextMenuStrip.Show(Parent.PointToScreen(e.Location));
        }
    }
}

نصائح أخرى

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

وانها لأن ToolStripComboBox يحتوي على "System.Windows.Forms.ComboBox" السيطرة، ولكن "ToolStripButton" لا يحتوي على "System.Windows.Forms.Control". يتم الحفاظ على البند toolstrip خاص، والتي من زر كتبها toolstip.

ويجب عليك استخدام ContextMenu على toolstip أو يمكنك إضافة المنسدلة لtoolstripbutton البند.

وسؤال جيد. كنت قد تكون قادرة على الوصول إلى toolstrip الأم (myToolStripButton.Parent أو شيئا من هذا القبيل) وإرفاق-قائمة السياق هناك.

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