【问题标题】:value wont change in an event值不会在事件中改变
【发布时间】:2012-09-17 13:15:00
【问题描述】:

我在 wpf 中创建了一个画布列表,并且我有一个按钮单击事件。我希望当我按下按钮时它会添加到列表中的新画布。但是当我尝试在另一个窗口中更改画布的属性时,它说索引超出范围,这意味着列表没有添加画布。我创建了一个方法来检查它,实际上它说索引是 0。 我也有这个数组,这里也一样,我改变了它的值,但它仍然写的值为0。这是代码:

public partial class New_Paint : Window
{
    public List<Canvas> paintsList = new List<Canvas>();
    public Canvas painting = new Canvas();

    private void ok_MouseUp(object sender, MouseButtonEventArgs e)
    {
        paintsList.Add(painting);
        this.Close();
    }
}

这是检查其大小的方法:

public int getSize()
{
    return paintsList.Count;
}

这是主窗口中的代码:

private void button1_Click(object sender, RoutedEventArgs e)
{
    textBox1.Text = paint.getSize() + "";
}

尽管我单击“确定”,但方法返回 0。该列表不会添加项目。

【问题讨论】:

  • 是的,我只是没在这里写
  • 是的,除了我上面提到的以外,一切正常
  • this.Close 我假设关闭了窗口,对吧?
  • 你在哪里添加“绘画”?因为你在做 paint.getSize 并没有添加任何东西。
  • 一开始我是在添加,但每次都崩溃了,所以我想看看它是否将项目添加到列表中,因此使用 getSize 方法

标签: c# wpf list


【解决方案1】:

我认为你是新手?您的画布列表属于您的 New_Paint 实例,您只需在关闭窗口之前将一个画布添加到该列表中(至少在您显示的代码中)。我不明白你为什么期望不止一个。您需要有一个画布的主列表,该列表归管理您的子窗口的任何人所有。

【讨论】:

  • 是的,我是新手。但是每当我调用 New_Paint 时,我都会创建一个新的画布,那么问题是什么?它不仅是一个,即使它有,它也不在列表中
  • 不过,您的代码没有多大意义。您可能需要 OK 按钮上的单击处理程序而不是 MouseUp 处理程序。您是否正在更改 OK 按钮处理程序中的 DialogResult?如果您只添加一个画布,为什么不直接使用画布引用?
  • “ok”不是Button 类型,我创建了一个标签并将其命名为“ok”,所以我需要MouseUp,因为标签没有Click 事件。而且我不只创建一个画布,New_Paint 窗口被多次调用。
  • 你并没有真正“调用”一个窗口。我认为这就是你感到困惑的地方。您在窗口上调用了哪些特定方法?
  • 如果不是电话,那是什么?我使用ShowDialog 方法并弹出新窗口,然后当我单击“确定”时,正在调用ok_MouseUp 方法(以及其他方法)
猜你喜欢
  • 2021-12-20
  • 1970-01-01
  • 2013-08-22
  • 2018-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-05
  • 2013-02-08
相关资源
最近更新 更多