2015-07-31 4 views
2

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

Что я хочу сделать, это получить координаты мыши onClick, но это происходит после подтверждения пользователем сообщения.

MessageBox> User Нажмите OK> пользователя Нажмите в любом месте на экране> Получить координаты

Должен ли я запустить таймер на кнопку "ОК"? Что я делаю по таймеру, чтобы ждать ответа мыши?

Это то, что я сейчас (который показывает положение мыши при нажатии кнопки OK):

private void button12_Click(object sender, EventArgs e) 
{ 
    if (MessageBox.Show("Pick a position after clicking OK", "OK", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) == DialogResult.OK) 
    { 
     // user clicked ok 
     MouseEventArgs me = (MouseEventArgs)e; 
     Point coordinates = me.Location; 
     MessageBox.Show("Coordinates are: " + coordinates); 
    } 
} 

ответ

1

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

Если вы хотите позиции вместо щелчка курсора, вы можете использовать Cursor класс, чтобы получить его Position свойства:

private void button12_Click(object sender, EventArgs e) 
{ 
    if (MessageBox.Show("Pick a position after clicking OK", "OK", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) == DialogResult.OK) 
    { 
     // user clicked ok 
     Point coordinates = Cursor.Position; 
     MessageBox.Show("Coordinates are: " + coordinates); 
    } 
} 

Чтобы получить координаты после того как пользователь закрыл MessageBox, вы можете использовать таймер. Для этого вам нужно будет объявить один на уровне класса, установить его событие Tick и переместить в него свой логин.

Теперь метод button12_Click запустит таймер, который покажет позицию курсора после истечения срока действия (в этом примере через одну секунду).

private Timer timer; //Declare the timer at class level 
public Form1() 
{ 
    InitializeComponent(); 
    // We set it to expire after one second, and link it to the method below 
    timer = new Timer {Interval = 1000}; //Interval is the amount of time in millis before it fires 
    timer.Tick += OnTick; 
} 

private void OnTick(object sender, EventArgs eventArgs) 
{ 
    timer.Stop(); //Don't forget to stop the timer, or it'll continue to tick 
    Point coordinates = Cursor.Position; 
    MessageBox.Show("Coordinates are: " + coordinates); 
} 


private void button1_Click(object sender, EventArgs e) 
{ 
    if (MessageBox.Show("Pick a position after clicking OK", "OK", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) == DialogResult.OK) 
    { 
     timer.Start(); 
    } 
} 
+0

Возможно, я высказывался некорректно. Но это позволяет мне щелкнуть мышью по кнопке «ОК» на MessageBox. Это не позволяет мне выбрать любую позицию экрана ПОСЛЕ нажатия кнопки ОК. –

+0

Но как только вы нажмете кнопку «ОК», как вы хотите подождать, пока пользователь выберет позицию? Вы не можете использовать таймер, потому что не знаете, когда он будет готов. Тем не менее, вы можете поместить мышь где-нибудь, а затем использовать ENTER, чтобы закрыть всплывающее окно, поэтому в основном «Выберите позицию, прежде чем нажимать OK (с помощью Enter)». Если это не удастся сделать, что бы вы хотели, чтобы произошло событие «Получить позицию мыши»? –

+0

Согласен, это может сработать. Так что я хочу, невозможно? Потому что я видел некоторое программное обеспечение с этой функцией. Как я уже сказал, я понятия не имею, как это сделать.Может быть, кнопка OK запускает таймер, и он создает функцию onClick внутри таймера? Idk –

1

позиции курсора относительно экрана

System.Windows.Forms.Cursor.Position 

позиции курсора относительно управления

var relativePoint = myControl.PointToClient(Cursor.Position); 

Глобальные крючки не поддерживаются в .NET Framework. См. Reference

Если вы хотите обрабатывать глобальные события щелчка мыши, взгляните на эту статью.

Processing Global Mouse and Keyboard Hooks in C#

+0

@GabrielDeFreitas: «Пользователь нажал в любом месте экрана» в своем приложении или в любом месте экрана? – CharithJ

+0

в любом месте экрана, а не на моем приложении –

+0

@GabrielDeFreitas: http://www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks-in-C – CharithJ