启用复选框时,在 canvas 上存储两次鼠标单击位置
Store two mouse click positions on canvas when checkbox enabled
我现在有一个复选框,当我点击它时,它应该允许用户点击 canvas 上的两个地方,然后会出现一个带有两次点击坐标的消息框,然后该复选框应取消选中自身。我已经尝试了各种方法并使 运行 陷入了一些问题。
- 选中复选框是一个 RoutedEventArgs,而点击 canvas 是一个 MouseButtonEventArgs。
- 我无法存储第二次鼠标点击(第一次点击出现两次);我尝试了各种 for 循环、while 循环等
- 无论我将 .Checked == false 放在哪里,我都无法在消息框出现后取消选中该框。我收到一条错误消息,指出 system.windows.etcetc.checked 只能出现在 += 或 -= 的左侧。
我想在与复选框相关的函数中处理整个事情,也就是 routedeventargs 而不是 canvas 单击方法。
我能弄清楚#2,但 1 和 3 难倒了我。
这是从 xaml 中的 canvas mousedown 订阅的方法示例:
public void get_Scaling(object sender, MouseButtonEventArgs e)
{
Point startPoint;
Point endPoint;
while (Scale_btn.IsChecked == true)
{
startPoint = e.GetPosition(canvas1);
endPoint = e.GetPosition(canvas1);
System.Windows.MessageBox.Show("Start point is" + startPoint + "and end point is" + endPoint, "test", MessageBoxButton.OK, MessageBoxImage.Information);
}
}
我发现了几个问题。
1) 以编程方式取消选中 CheckBox 的方法是使用 IsChecked 属性.
Scale_btn.IsChecked = false;
2) 请记住,您的 while 循环 运行 在单个 MouseDown 事件处理程序内。您将无法在该 while 循环中捕获两个不同的 MouseDown 事件。为了实现您的目标,您需要将 Point 对象带到事件处理程序之外,并使用另一个变量来跟踪您正在捕获的点击。
bool firstPointCaptured = false;
Point startPoint;
Point endPoint;
private void get_Scaling(object sender, MouseButtonEventArgs e)
{
if (Scale_btn.IsChecked == true)
{
if (!firstPointCaptured)
{
startPoint = Mouse.GetPosition(canvas1);
firstPointCaptured = true;
}
else
{
endPoint = Mouse.GetPosition(canvas1);
System.Windows.MessageBox.Show("Start point is" + startPoint + "and end point is" + endPoint, "test", MessageBoxButton.OK, MessageBoxImage.Information);
Scale_btn.IsChecked = false;
firstPointCaptured = false;
}
}
}
我现在有一个复选框,当我点击它时,它应该允许用户点击 canvas 上的两个地方,然后会出现一个带有两次点击坐标的消息框,然后该复选框应取消选中自身。我已经尝试了各种方法并使 运行 陷入了一些问题。
- 选中复选框是一个 RoutedEventArgs,而点击 canvas 是一个 MouseButtonEventArgs。
- 我无法存储第二次鼠标点击(第一次点击出现两次);我尝试了各种 for 循环、while 循环等
- 无论我将 .Checked == false 放在哪里,我都无法在消息框出现后取消选中该框。我收到一条错误消息,指出 system.windows.etcetc.checked 只能出现在 += 或 -= 的左侧。
我想在与复选框相关的函数中处理整个事情,也就是 routedeventargs 而不是 canvas 单击方法。
我能弄清楚#2,但 1 和 3 难倒了我。
这是从 xaml 中的 canvas mousedown 订阅的方法示例:
public void get_Scaling(object sender, MouseButtonEventArgs e)
{
Point startPoint;
Point endPoint;
while (Scale_btn.IsChecked == true)
{
startPoint = e.GetPosition(canvas1);
endPoint = e.GetPosition(canvas1);
System.Windows.MessageBox.Show("Start point is" + startPoint + "and end point is" + endPoint, "test", MessageBoxButton.OK, MessageBoxImage.Information);
}
}
我发现了几个问题。
1) 以编程方式取消选中 CheckBox 的方法是使用 IsChecked 属性.
Scale_btn.IsChecked = false;
2) 请记住,您的 while 循环 运行 在单个 MouseDown 事件处理程序内。您将无法在该 while 循环中捕获两个不同的 MouseDown 事件。为了实现您的目标,您需要将 Point 对象带到事件处理程序之外,并使用另一个变量来跟踪您正在捕获的点击。
bool firstPointCaptured = false;
Point startPoint;
Point endPoint;
private void get_Scaling(object sender, MouseButtonEventArgs e)
{
if (Scale_btn.IsChecked == true)
{
if (!firstPointCaptured)
{
startPoint = Mouse.GetPosition(canvas1);
firstPointCaptured = true;
}
else
{
endPoint = Mouse.GetPosition(canvas1);
System.Windows.MessageBox.Show("Start point is" + startPoint + "and end point is" + endPoint, "test", MessageBoxButton.OK, MessageBoxImage.Information);
Scale_btn.IsChecked = false;
firstPointCaptured = false;
}
}
}