Как добавить метку и клик мышкой по тому же месту в C #? - PullRequest
1 голос
/ 19 ноября 2010

В моей программе есть поле для картинок, и я хочу, чтобы после щелчка мышью или по выбору ContextMenuStrip что-то появлялось в том же месте щелчка.добавить какую-то заметку в определенную область даты, по которой щелкнули (вероятно, добавить пользовательский элемент управления)

Как мне это сделать?как я могу послать клик по кординату (x, y) и заставить что-то появиться в этих же координатах?

Спасибо!

alt text

Ответы [ 3 ]

1 голос
/ 19 ноября 2010

Я бы создал класс, который бы предоставлял пункты меню и фиксировал координаты x, y, чтобы они были готовы при нажатии на элемент. Или вы можете зафиксировать эти координаты в анонимном делегате.

Примерно так:

public Form1()
{
    InitializeComponent();
    MouseClick += new MouseEventHandler(Form1_MouseClick);
}

private void Form1_MouseClick (object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Right)
    {
        ContextMenuStrip ctxMenu = new ContextMenuStrip();

        // following line creates an anonymous delegate
        // and captures the "e" MouseEventArgs from 
        // this method
        ctxMenu.Items.Add(new ToolStripMenuItem(
           "Insert info", null, (s, args) => InsertInfoPoint(e.Location)));

        ctxMenu.Show(this, e.Location);
    }
}

private void InsertInfoPoint(Point location)
{
    // insert actual "info point"
    Label lbl = new Label()
    {
        Text = "new label",
        BorderStyle = BorderStyle.FixedSingle,
        Left = location.X, Top = location.Y
    };
    this.Controls.Add(lbl);
}
1 голос
/ 19 ноября 2010

Пример кода по вашему требованию. В приведенном ниже коде я добавляю кнопку управления по щелчку мыши. Вы можете изменить код в соответствии с вашими потребностями.

    int xValue=0, yValue=0;
    private void Form1_MouseClick(object sender, MouseEventArgs e)
    {
        xValue = e.X;
        yValue = e.Y;
        Button btn = new Button();
        btn.Name = "Sample Button";
        this.Controls.Add(btn);
        btn.Location = new Point(xValue, yValue);
    }
0 голосов
/ 19 ноября 2010

Вы можете использовать либо всплывающую подсказку, либо событие mousemove. это событие предоставит вам текущее положение мыши по оси XY, а затем вы сможете показать свой контент либо видимым значением true / false в этом месте, либо взять метку и установить его текст, а затем установить его положение xy в соответствии с xy мыши. а затем при событии mouseleave переместите эту метку на экран или скройте

...