1

所以......用户必须点击按钮,在他点击它之后,程序应该等待再次点击面板并获取该点击的坐标。但只要我点击按钮,一切都变得毫无反应。难道我做错了什么?

    private void Surbutton_Click(object sender, EventArgs e)
    {
        panel1.Cursor = Cursors.Cross;
        Cursor.Position = new Point(Left + panel1.Left + panel1.Width / 2, Top + panel1.Top + panel1.Height / 2);
        ziskavanie_pozicie = true;

        //Button ABCD = sender as Button;
        string ABCD = ((Button)sender).Name;

        switch (ABCD)
        {
            case "button_A":
                //cakaj.WaitOne();
                cakaj_manual.WaitOne();
                suradnica_Ax.Text = x.ToString();
                suradnica_Ay.Text = x.ToString();
                break;

            case "button_B":
                suradnica_Bx.Text = x.ToString();
                suradnica_By.Text = x.ToString();
                break;

            case "button_C":
                suradnica_Cx.Text = x.ToString();
                suradnica_Cy.Text = x.ToString();
                break;

            case "button_D":
                suradnica_Dx.Text = x.ToString();
                suradnica_Dy.Text = x.ToString();
                break;
        }
    }

    public void panel1_MouseClick(object sender, MouseEventArgs e)
    {
        MessageBox.Show("Hehe");
        if (ziskavanie_pozicie == true)
        {
            x = e.X;
            y = e.Y;
            //panel1.PointToClient(Cursor.Position);

            ziskavanie_pozicie = false;
            panel1.Cursor = Cursors.Default;
            //cakaj.Set();      
            cakaj_manual.Set();
        }
    }
4

2 回答 2

0

因此,当用户单击图像上光标显示的按钮(或任何带有箭头的按钮)时,光标将移动到白色面板的中心。那时我需要用户单击面板上的某个位置并获取该单击的坐标。当我有坐标时,我将它们分配给按钮左侧的文本框。

https://imgur.com/a/il1FI

于 2018-03-30T13:39:32.140 回答
0

如果您只想知道程序冻结的原因,那是因为您出于某种原因使用

ManualResetEvent 或 AutoResetEvent

预计不会在主线程上使用它们,因为这不是他们创建的原因。例如,如果您manualResetEvent.WaitOne();在主线程上说,一切都会冻结。它们只是用于同步线程,就像Mutex, Semphores, TPL->Await等一样。

于 2018-03-30T11:36:21.730 回答