したがって、キャンバスに配置するオブジェクトには、長方形とテキストボックスの 2 種類があります。私の問題は次のとおりです。消しゴムのように長方形とテキストボックスをマウスダウンで削除する必要があります。画面に四角形のみを配置した場合は四角形のみを削除でき、画面上にテキストボックスのみを配置した場合はテキストボックスのみを削除できます。Mousedown
しかし、 (マウス)を使用して画面上で両方を削除する必要があるため、たとえば、画面上では 2 つの四角形と 1textbox
であり、それらをクリックすると次のエラーが発生しました: System.Windows.Controls 型のオブジェクトを変換できません。 TextBox を System.Windows.Shapes.Rectangle の型に
キャスティングの問題であることはわかっていますが、多くのことを試しました。
これは今のところ私のコードです:
class Eraser
{
private Label status;
private List<Rectangle> kaders;
private List<TextBox> textboxen;
private Canvas window;
public Eraser(Canvas win, Label status)
{
this.status = status;
this.window = win;
//Application.Current.MainWindow.Cursor = new Cursor(AppDomain.CurrentDomain.BaseDirectory + @"../../Icons/eraser.cur");
//Mouse.OverrideCursor = newCursor;
//Mouse.OverrideCursor = Application.Current.MainWindow.Cursor;
textboxen = new List<TextBox>();
kaders = new List<Rectangle>();
foreach (Object element in win.Children)
{
if (element is Rectangle)
{
Mouse.RemoveMouseDownHandler(window, item_Mousedown);
verzamelKaders();
}
else if (element is TextBox)
{
Mouse.RemoveMouseDownHandler(window, Element_Mousedown);
verzamelTextboxen();
}
}
}
private void verzamelKaders()
{
Mouse.RemoveMouseDownHandler(window, item_Mousedown);
foreach (Rectangle element in window.Children)
{
if (element.GetType() == typeof(Rectangle))
{
Mouse.RemoveMouseDownHandler(window, item_Mousedown);
kaders.Add(element);
element.MouseDown += new MouseButtonEventHandler(Element_Mousedown);
}
else
{
element.MouseDown += new MouseButtonEventHandler(item_Mousedown);
}
}
}
private void verzamelTextboxen()
{
Mouse.RemoveMouseDownHandler(window, Element_Mousedown);
foreach (TextBox item in window.Children)
{
if (item.GetType() == typeof(TextBox))
{
Mouse.RemoveMouseDownHandler(window, Element_Mousedown);
textboxen.Add(item);
item.PreviewMouseDown += new MouseButtonEventHandler(item_Mousedown);
}
else
{
item.MouseDown += new MouseButtonEventHandler(Element_Mousedown);
}
}
}
private void Element_Mousedown(object sender, MouseButtonEventArgs e)
{
Mouse.RemoveMouseDownHandler(window, item_Mousedown);
Rectangle removekader = new Rectangle();
removekader = (Rectangle)sender;
window.Children.Remove(removekader);
}
private void item_Mousedown(object sender, MouseButtonEventArgs e)
{
Mouse.RemoveMouseDownHandler(window, Element_Mousedown);
TextBox removeTextbox = new TextBox();
removeTextbox = (TextBox)sender;
window.Children.Remove(removeTextbox);
}
}