如何链接两个表格

时间:2013-11-13 06:54:13

标签: wpf vb.net

控制模拟的一种形式。  一种表示彩色玻璃窗的形式。

我有一个NumericUpDown1,其中包含我希望在SecondForm上显示的数字列表,但是当我尝试运行该程序时,没有任何显示 这是我编码的方式

    Dim Redpen As New Pen(Color.Red)
    Dim i As Integer
    Dim MyGraphicsClass As Graphics = Me.CreateGraphics
    Dim a, b, c, d As Integer

Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load

    a = 0
    b = 20
    c = 30
    d = 50
End Sub

Private Sub NumericUpDown1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NumericUpDown1.ValueChanged

    NumericUpDown1.Dock = System.Windows.Forms.DockStyle.None
    NumericUpDown1.Maximum = 7
    NumericUpDown1.Minimum = 1
    Controls.Add(NumericUpDown1)
   End Sub

   Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        SecondForm.Show()
    If NumericUpDown1.DecimalPlaces = 1 Then
        MyGraphicsClass.DrawLine(Pens.Red, a, b, a, b)
    End If

    Number_Of_Lines = 2
    For i = 1 Number_Of_Lines Step 1
        If NumericUpDown1.DecimalPlaces = 2 Then
            MyGraphicsClass.DrawLine(Pens.Red, a, c, a, c)
        End If
    Next i

    Number_Of_Lines = 3
    For i = 1 Number_Of_Lines Step 1
        If NumericUpDown1.DecimalPlaces = 3 Then
            MyGraphicsClass.DrawLine(Pens.Red, a, d, a, d)
        End If
    Next i

    Number_Of_Lines = 4
    For i = 1 Number_Of_Lines Step 1
        If NumericUpDown1.DecimalPlaces = 4 Then
            MyGraphicsClass.DrawLine(Pens.Red, a, c, a, c)
        End If
    Next i

    Number_Of_Lines = 5
    For i = 1 Number_Of_Lines Step 1
        If NumericUpDown1.DecimalPlaces = 5 Then
            MyGraphicsClass.DrawLine(Pens.Red, a, b, a, b)
        End If
    Next i

    Number_Of_Lines = 6
    For i = 1 Number_Of_Lines Step 1
        If NumericUpDown1.DecimalPlaces = 6 Then
            MyGraphicsClass.DrawLine(Pens.Red, a, c, a, c)
        End If
    Next i

    Number_Of_Lines = 7
    For i = 1 Number_Of_Lines Step 1
        If NumericUpDown1.DecimalPlaces = 7 Then
            MyGraphicsClass.DrawLine(Pens.Red, a, c, a, c)
        End If
    Next i
End Sub

结束班

2 个答案:

答案 0 :(得分:0)

some_variable = firstform.NumericUpdown.YourObjectHere

答案 1 :(得分:0)

首先,不确定你在做什么NumericUpDown1_ValueChanged代码。您每次更改值时都设置最小值/最大值,然后将其重新添加到控件集合???

其次,我看不出你的SecondForm被宣布/初始化的方式或位置,或MyGraphicsClass是什么,我认为这是回答你问题所需的两个主要部分,但这就是我所知道的关于你想要做什么。

因为您需要在第二个表单的paint事件中绘制线条,所以您需要能够从第一个表单中读取值。执行此操作的最佳方法是将第一个表单的实例分配给第二个表单中的变量。 (有很多不同的方法可以做到这一点。公共变量是最简单的)然后在第二种形式的paint事件中,你可以读取第一种形式的控件的值。您将希望以第一种形式保留第二个表单的实例,以便您可以在需要时告诉第二个表单重新绘制。

- 第一个表单变量

Private _SecondForm as SecondForm

- 第一次显示第二个表单时,如下所示:

If _SecondForm is nothing then
  _SecondForm = new SecondForm
  _SecondForm.MyFirstForm = me
End If
_SecondForm.show(me) 'You could also do this which sets the owner, then you can ask for the owner in the second form, instead of setting a variable.

现在您已经拥有了第二种形式的实例,您可以在第一种形式中随时使用。

- 第二个表单变量,注意这是在第一个表单(上面)中设置的

Public MyFirstForm as FirstForm

- 在您的Paint事件中

e.Graphics.DrawLine(Pens.Red, MyFirstForm.NumericUpDown1.Value, MyFirstForm.NumericUpDown2.Value, MyFirstForm.NumericUpDown3.Value, MyFirstForm.NumericUpDown4.Value)

或者,如果您使用所有者方法,则可以执行以下操作:

Dim x As FirstForm = Me.Owner
e.Graphics.DrawLine(Pens.Red, x.NumericUpDown1.Value, x.NumericUpDown2.Value, x.NumericUpDown3.Value, x.NumericUpDown4.Value)