Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Как привязать PopupMenu к MouseClick


Автор: VisualProgrammerNET 10.4.2006, 22:04
Насколько я знаю, PopupMenu привязывается к определённому контролу. Как сделать так, чтобы разный popup появлялся в зависимости от того, в каком месте контрола сделан клик?

Например, если правый клик сделан в некоторой области Size1, то выскакивает Popup1, если в области Size2, Popup2. smile

Автор: Exception 10.4.2006, 22:16
  • Вопрос по Windows Forms
  • Никак
  • Зачем такое извращение?

Автор: VisualProgrammerNET 10.4.2006, 22:30
Ну ладно, придётся создавать отдельные формы и показывать их... smile

Автор: Exception 10.4.2006, 22:45
Дык можешь задачу опиать? можем вместе найти решение...

Автор: -ser- 11.4.2006, 06:27
а contextMenuStrip для чего дан?

привязывай к MouseDown, проверяй координаты клика и рисуй себе что надо и где надо.

Автор: VisualProgrammerNET 11.4.2006, 17:54
Как всегда, объясняю на кружочках (хотя так оно в программе и есть smile ). Есть класс, представляющий собой кружочек. Он двигается по форме. И вот надо, если правкликнуть на кружочке, чтобы появилась менюшка.

Автор: Ch0bits 11.4.2006, 21:13
Ничего не понимаю. smile
Добавлено @ 21:28
Кажется понял на что ты намекаешь! smile
Код

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

namespace WindowsApplication4
{
    public partial class Form1 : Form
    {
        // Твой контрол кружочек
        Circle circ = new Circle();

        public Form1()
        {
            InitializeComponent();

            // Устанавливаем свойства контрола
            circ.Top = 30;
            circ.Left = 30;
            circ.Width = 50;
            circ.Height = 50;
            circ.MouseClick += new MouseEventHandler(circ_MouseClick);

            // Добавляем его к форме
            this.Controls.Add(this.circ);
            
        }

        void circ_MouseClick(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                // Создаём наше меню и пункты к нему
                ContextMenuStrip CM = new ContextMenuStrip();
                for (int i = 1; i < 10; i++)
                    CM.Items.Add("Пункт меню "+i.ToString());

                // Устанавливаем обработчик выбора пункта меню
                CM.ItemClicked += new ToolStripItemClickedEventHandler(CM_ItemClicked);

                // Показываем его на контроле
                CM.Show(circ,e.X, e.Y);
            }
        }

        void CM_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            MessageBox.Show("Выбран пункт "+e.ClickedItem.Text);
        }


    }


    public partial class Circle : Control
    {
        public Circle()
        {
            InitializeComponent();
        }

        protected override void OnPaint(PaintEventArgs pe)
        {
            base.OnPaint(pe);
            pe.Graphics.DrawEllipse(Pens.Black, 0, 0, this.Width - 1, this.Height - 1);
        }
    }
}

Автор: VisualProgrammerNET 11.4.2006, 21:49
Во, я и имел в виду ContextMenu. Давно не заглядывал в тулбар, думал, это называется PopupMenu smile

Автор: Ch0bits 11.4.2006, 22:19
Эх, зря тока код писал. smile
Сразу надо было на стандартные контролы смотреть. smile

Автор: Exception 11.4.2006, 23:26
Тьфу, я не понял, о чём ты smile . Извиняюсь.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)