将数组传递给另一个表单(vb.net)

时间:2017-10-16 10:32:19

标签: vb.net

我有一个公开声明数组的表单,

Public requestedqueue() As Integer

我想将数组传递给form3并在那里执行其他计算,但是如何? 我尝试过(以新的形式):

public newrequest() As Integer
newrequest = form2.requestedqueue

我尝试通过以下方式以新形式展示:

TextBox1.Text = = String.Join(",",form2.newrequest)

但每当我遇到form3时,它会说newrequest为null。 但它在form2中显示为一个数组,我很困惑。

2 个答案:

答案 0 :(得分:0)

我不确定你的意思

  

但它在form2中显示为数组

import random import numpy as np import math class Network(object): def __init__(self,inputLayerSize,hiddenLayerSize,outputLayerSize): #Create weight vector arrays to represent each layer size and initialize indices randomly on a Gaussian distribution. self.layer1 = np.random.randn(hiddenLayerSize,inputLayerSize) self.layer1_activations = np.zeros((hiddenLayerSize, 1)) self.layer2 = np.random.randn(outputLayerSize,hiddenLayerSize) self.layer2_activations = np.zeros((outputLayerSize, 1)) self.outputLayerSize = outputLayerSize self.inputLayerSize = inputLayerSize self.hiddenLayerSize = hiddenLayerSize # print(self.layer1) # print() # print(self.layer2) # self.weights = [np.random.randn(y,x) # for x, y in zip(sizes[:-1], sizes[1:])] def feedforward(self, network_input): #Propogate forward through network as if doing this by hand. #first layer's output activations: for neuron in range(self.hiddenLayerSize): self.layer1_activations[neuron] = 1/(1+np.exp(network_input * self.layer1[neuron])) #second layer's output activations use layer1's activations as input: for neuron in range(self.outputLayerSize): for weight in range(self.hiddenLayerSize): self.layer2_activations[neuron] += self.layer1_activations[weight]*self.layer2[neuron][weight] self.layer2_activations[neuron] = 1/(1+np.exp(self.layer2_activations[neuron])) #convert layer 2 activation numbers to a single output. The neuron (weight vector) with highest activation will be output. outputs = [x / 10 for x in range(-int((self.outputLayerSize/2)), int((self.outputLayerSize/2))+1, 1)] #range(-10, 11, 1) return(outputs[np.argmax(self.layer2_activations)]) def train(self, training_pairs, epochs, minibatchsize, learn_rate): #apply gradient descent test_data = build_sinx_data(1000) for epoch in range(epochs): random.shuffle(training_pairs) minibatches = [training_pairs[k:k + minibatchsize] for k in range(0, len(training_pairs), minibatchsize)] for minibatch in minibatches: loss = 0 #calculate loss for each minibatch #Begin training for x, y in minibatch: network_output = self.feedforward(x) loss += (network_output - y) ** 2 #adjust weights by abs(loss)*sigmoid(network_output)*(1-sigmoid(network_output)*learn_rate loss /= (2*len(minibatch)) adjustWeights = loss*(1/(1+np.exp(-network_output)))*(1-(1/(1+np.exp(-network_output))))*learn_rate self.layer1 += adjustWeights #print(adjustWeights) self.layer2 += adjustWeights #when line 63 placed here, results did not improve during minibatch. print("Epoch {0}: {1}/{2} correct".format(epoch, self.evaluate(test_data), len(test_data))) print("Training Complete") def evaluate(self, test_data): """ Returns number of test inputs which network evaluates correctly. The ouput assumed to be neuron in output layer with highest activation :param test_data: test data set identical in form to train data set. :return: integer sum """ correct = 0 for x, y in test_data: output = self.feedforward(x) if output == y: correct+=1 return(correct) def build_sinx_data(data_points): """ Creates a list of tuples (x value, expected y value) for Sin(x) function. :param data_points: number of desired data points :return: list of tuples (x value, expected y value """ x_vals = [] y_vals = [] for i in range(data_points): #parameter of randint signifies range of x values to be used*10 x_vals.append(random.randint(-2000,2000)/10) y_vals.append(round(math.sin(x_vals[i]),1)) return (list(zip(x_vals,y_vals))) # training_pairs, epochs, minibatchsize, learn_rate sinx_test = Network(1,21,21) print(sinx_test.feedforward(10)) sinx_test.train(build_sinx_data(600),20,10,2) print(sinx_test.feedforward(10)) 将为newrequest,因为您已将其设置为Nothing的值requestedqueue,直到您使用某些值填充数组。

如果您有Nothing,则不会遇到错误。

答案 1 :(得分:0)

将数据传递给表单的一种方法是将属性添加到第二个表单。

假设您有一个名为Form3的表单,这是您的表单代码。在代码中,您需要声明一个整数数组来保存传递的数据,并声明一个公共属性,以便您有一种传递数组的方法

Public Class Form3
    Dim requestedqueue() As Integer

    Public Property ArrayParameter As Integer()
        Get
            Return arrayData
        End Get
        Set(value() As Integer)
            arrayData = value
        End Set
    End Property

End Class

然后,要在form1中传递来自Form1的数据,您只需使用

Form3.ArrayParameter=requestedqueue()

设置参数。

如果您愿意,您可以正常显示表单,或者如果表单已经可见,您可以使用按钮点击等处理代码。

如果您希望在没有任何用户交互的情况下立即处理已打开的表单中的数据,您可以编写一个执行处理的过程,并将其包含在您的属性的Set部分中。

例如。如果要将数组的所有元素添加到ListBox中名为ListBox1的{​​{1}},您可以编写这样的过程..

Form3

并将您的Private Sub AddDataToListbox() ListBox1.Items.Clear() For Each item As Integer In requestedqueue ListBox1.Items.Add(item) Next End Sub 代码更改为此

Form3.ArrayParameter