-1

我正在用一个方法在我的面板上绘制一些东西,当我通过一个按钮调用这个方法时它会绘制,但是当我调用这个方法时Form_Load它不会绘制任何东西。当我调试它时,它实际上通过代码没有任何问题,但它仍然不会绘制任何东西。

下面你可以看到Form_LoadButton_Click事件:

private: System::Void SelectElementForm_Load(System::Object^  sender, System::EventArgs^ e)
{
    if (ElementList->Count > 0)
    {
        Index = 0;
        DrawLinesInLayout();
    }
}

和按钮

private: System::Void btnLeft_Click(System::Object^  sender, System::EventArgs^  e)
{
    if (ElementList->Count > 0)
    {
        if (Index + 1 > 1)
        {
            Index--;
            DrawLinesInLayout();
        }
        else
        {
            Index = ElementList->Count - 1;
            DrawLinesInLayout();
        }
    }
}

当我使用Paint-event它时,它适用于我的表单弹出时。但是后来我在我的程序中得到了两次代码,这有点毫无意义。

所以我的问题是:

  • 为什么我的 Form_load 没有正确使用我的方法而我的按钮是?
  • 我可以Paint在单击按钮时调用事件吗?
4

1 回答 1

0

正如 Hans Passant 所提到的,你不能利用尚不存在的东西。解决方案:创建后绘制。

Invalidate();不起作用,因为绘图方法中有变量会发生变化(这就是Index每个调用事件发生变化的原因)。

不要使用Load事件,而是使用Shown事件。这将在表单上绘制线条:

private: System::Void SelectElementForm_Shown(System::Object^  sender, System::EventArgs^  e) 
{
    if (ElementList->Count > 0)
    {
        Index = 0;
        DrawLinesInLayout();
    }
}
于 2015-09-30T11:30:11.377 回答