VB.net绘制事件多个实例 - 发送者对象

时间:2016-03-14 15:27:46

标签: vb.net graphics load paint sender

这里有一个有趣的错误,我终于找到了原因。问题是,经过几天彻底的试验和错误,我空手而归。

因此,关于我的程序的问题部分是,表单的这些多个实例是父表单的子项。一次可以有几个单独的子表单实例。

他们加载很好,但是,发件人对象似乎错了。我们只说我们有Form2-1(第一个实例)。 Form2-1已经打开并显示内容。

现在我们打开Form2-2(Form2的第二个实例)。根据检查" Sender"它加载正常。 load事件的对象。

我的问题在于,一旦加载事件完成,它就会射向油漆事件。在加载表单中,允许paint事件绘制数据和信息的Object在load事件中被赋予此数据和信息。

在加载Form2-2(第二个实例)后到达此paint事件时,paint事件的sender对象是Form2-1(第一个实例)。所以我们现在覆盖了应该在第二个实例上的第一个实例上的所有内容。

它将循环然后绘制第二个实例,第三个实例等...加载和绘制事件"发送者"没有排队,导致图形丢失。基本上,无论打开的最新实例是什么,所有其他先前的实例都将获得从最新实例绘制的图形。

知道这里发生了什么吗?

编辑:澄清,将数据和信息提供给另一个对象的对象(让我们称之为Object1 [给对象]),Object2(在加载事件中从Object1检索数据的对象[检索器] object])用于paint事件; Object1从子程序中获取数据,该子程序从程序外部的文件中检索信息。

EDIT2:TempObject,Object1和Object2都是相同的结构。以下是涉及的各种潜艇和事件的片段:

此时,已加载Form2-1。此加载事件现在正在加载Form2-2,它就是这样做的。 Temp保留当前没有执行任何操作的备份数据。 在这种情况下,它将持有Form2-1的数据,直到它获取Form2-2的Object1的数据。 Object2获取Form2-2的Object1数据。然后将此Object2传递给paint事件,并且在paintevent内部调用的各个subs使用Object2来绘制数据和信息,因为Object2是结构的PUBLIC声明

 Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As     
System.EventArgs) Handles MyBase.Load
'Document info is in public obj, Object1
'x-fer to this docs info obj Object2
RedimTempObject()
'TempObject = Object1
'*TempObject Used as a backup source of data because when you do certain    
functions in Form2 from
'*ParentForm, VB.Net reads it in a way that Object2 does not have any data.    TempObject fixes this.
    Object2 = Object1
End Sub

在它加载Form2-2之后,它来到这里,发送者读取" Form2-1"。此时,如果你是断点踩到,在程序屏幕上将显示Form2-1加载和绘制和前缀的Form2-2的东西

 Public Sub frmDoc_Paint(ByVal sender As System.Windows.Forms.Form, ByVal e                           
As PaintEventArgs) Handles Me.Paint
'A few subroutines in here that only take the "e" argument to draw stuff
End Sub

0 个答案:

没有答案
相关问题