所以......用户必须点击按钮,点击它后,程序应该等待Panel上的另一次点击并获得该点击的坐标。但是一旦我点击按钮,一切都变得没有响应。我做错了吗?
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();
}
}
答案 0 :(得分:0)
如果您只是想知道您的程序冻结的原因,那是因为您出于某种原因使用了
ManualResetEvent或AutoResetEvent
预计不会在主线程上使用,因为它不是他们创建的原因。
如果你在主线程上说例如manualResetEvent.WaitOne();
,一切都会冻结。
它们只是用于同步线程,就像Mutex, Semphores, TPL->Await
等。
答案 1 :(得分:0)
因此,当用户点击图像上的光标所示的按钮(或任何带箭头的按钮)时,光标将被移动到白色面板的中心。此时我需要用户单击面板上的某个位置并获取该单击的坐标。当我有坐标时,我将它们分配给按钮左侧的文本框。