(Ironpython / Winforms) Получить значение из текстового поля, созданного в цикле for - PullRequest
0 голосов
/ 14 октября 2018

Я использую ironpython и winform для создания текстовых полей в цикле for.У меня проблемы с получением значений текстового поля, которые были созданы.

Например, я не могу получить значение self.name1.Text при нажатии кнопки, которая предполагает получение этого значения.

    import clr
    clr.AddReference('System.Windows.Forms')
    clr.AddReference('System.Drawing')
    from System.Windows import *
    from System.Drawing import *
    from System.Windows.Forms import *
    number=7
    class Part1(Form):
        def __init__(self):
            y=0
            #textbox
            for x in range(0,number):
                name="name" + str(x)
                self.name = TextBox()
                self.name.Text=str(name)
                self.name.Location = Point(0,y)
                self.Controls.Add(self.name)    
                y=y+25
            #button
            self.but = Button()
            self.but.Text = "Click me"
            self.but.Location = Point(0, y)      
            self.but.Click += self.but_click
            self.Controls.Add(self.but)
    #button function
        def but_click(self, sender, args):
            MessageBox.Show(self.name1.Text)
    form = Part1()
    Application.Run(form)

Почему я не могуполучить значения этих текстовых полей, и что мне нужно изменить / добавить, чтобы иметь возможность получить их?

Спасибо

1 Ответ

0 голосов
/ 17 октября 2018

Вы перезаписываете self.name с каждым вновь созданным TextBox.Кроме того, позже вы попытаетесь использовать self.name1, который не существует.Вам необходимо сохранить все текстовые поля в списке, чтобы отслеживать их и обращаться к ним позже.

self.name = [None] * number
for x in range(0,number):
    name="name" + str(x)
    self.name[x] = TextBox()
    self.name[x].Text=str(name)
    self.name[x].Location = Point(0,y)
    self.Controls.Add(self.name[x])
    y=y+25

, а затем получить к нему доступ через список

def but_click(self, sender, args):
    MessageBox.Show(self.name[1].Text)
...