编辑:对于新程序员OOP来说,仅仅调用类是不够的,如果语法正在寻找特定的变量类型,它就会抛出一个错误。正如下面的答案所指出的那样,这就是问题所在,这一行代码:
System.Windows.Controls.Canvas.SetLeft(Gate_list[Gate_list.Count - 1], Pos.X);它有一个致命的错误,那就是Canvas.SetLeft正在寻找一个画布子类(在本例中是一个矩形)和一个点。但是,当类类型为Gate_list[Gate_list.Count - 1]时,我发送了一个类类型的Gate_list[Gate_list.Count - 1].GetRect()
编辑结束
我有一个委托,它在方法中调用类。委托正在检测Rectangle(Here is how it's done)上的鼠标向下事件。在这个方法中,我尝试在一个SetLeft上使用Rectangle,我只是将它添加到Canvas中,但是得到了错误CS1503。
我尝试过将其转换为System.Windows.UIElement,但系统无法转换。
public partial class Program
{
public void Rect_Button_MouseDown(MainWindow MainWind, string Tag)
{
Point Pos = new Point();
Pos = System.Windows.Input.Mouse.GetPosition(MainWind.Main_Canvas);
if (Drag == false)
{
Drag = true;
Gate_list.Add(new Gate_Class(Convert.ToInt32(Tag),new Rectangle()));
MainWind.Main_Canvas.Children.Add(Gate_list[Gate_list.Count-1].Get_Rect());
System.Windows.Controls.Canvas.SetLeft(Gate_list[Gate_list.Count - 1], Pos.X);
}
}
}我认为应该有一个客场来转移system.windows,但我不知道。
我的问题在于找到一种将Gate_list[]转换为UIElement的方法。
发布于 2019-05-14 08:25:29
Gate_Class显然不是UIElement。它应该有一个Rectangle属性,返回传递给其构造函数的Rectangle。然后,可以设置Canvas.Left属性的Rectangle。
System.Windows.Controls.Canvas.SetLeft(Gate_list[Gate_list.Count - 1].Rectangle, Pos.X);public class Gate_Class
{
public Gate_Class(int tag, Rectangle rectangle)
{
//...
Rectangle = rectangle;
}
public Rectangle Rectangle { get; }
}发布于 2019-05-14 08:21:25
我认为在您的代码的最后一行中,您提供了Gate_list[Gate_list.Count - 1],但这是您的自定义类,而不是您刚刚创建的Rectangle。我可以从您的代码中推断,您可以通过使用Rectangle获得Gate_list[Gate_list.Count - 1].Get_Rect()。
换句话说,在我看来,需要添加.Get_Rect()才能真正得到矩形。
如果这不起作用,请提供您的Gate_Class代码和您正在收到的错误消息。
https://stackoverflow.com/questions/56125696
复制相似问题