Сообщество программистов Autodesk в СНГ

ADN Club => Revit API => Тема начата: Дмитрий Дронов от 27-12-2015, 15:59:22

Название: Получение текста после завершения .Net Winform приложения
Отправлено: Дмитрий Дронов от 27-12-2015, 15:59:22
Здравствуйте.
Такой вопрос к специалистам:
Как можно получить значение вводимого текста после завершения .Net Winform приложения?
-
Опишу подробней что хочу и что получилось сделать:
1. Создал в среде Sharp Develop простенькое окошко:
(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fdl1.joxi.net%2Fdrive%2F0005%2F3263%2F371903%2F151227%2F0a0f16db30.png&hash=06ebb8737ad59847c396acb0ee59eac7)
2. Затем скопировал код в DynamoSandbox (http://dynamobim.com/)-Python
3. Заменил шапку путей импорта
4. Заменил Form на полный путь: http://joxi.ru/Q2KVGVBf9wQ8Rm
4. Добавил в конце " System.Windows.Forms.Application.Run(MainForm()) "
5. Запустил. Открылось приложение с возможностью вводить текст.
-
Но когда я ввожу текст, и закрываю приложение (хоть нажав на крестик, хоть прикрутив кнопку "ОК"), то этот текст не попадает внутрь Динамо-Питона....  http://joxi.ru/12MBlBNh409JjA
Вопрос....
Как это сделать? Как закрыть приложение так, чтобы текст введенный в ТекстБоксе сохранился? http://joxi.ru/gmv3z39fxvD3L2
Прикладываю ДинамоФайл + ПитонКод.
Буду признателен за любую мысль. Спасибо.
-
Вот код Python:
Код - Python [Выбрать]
  1. import System
  2. from System import *
  3. import clr
  4. bl = IN[0]
  5. clr.AddReference("System.Windows.Forms")
  6. clr.AddReference("System.Drawing")
  7.  
  8. class MainForm(System.Windows.Forms.Form):
  9.         def __init__(self):
  10.                 self.InitializeComponent()
  11.        
  12.         def InitializeComponent(self):
  13.                 self._textBox1 = System.Windows.Forms.TextBox()
  14.                 self.SuspendLayout()
  15.                 #
  16.                 # textBox1
  17.                 #
  18.                 self._textBox1.Location = System.Drawing.Point(24, 81)
  19.                 self._textBox1.Name = "textBox1"
  20.                 self._textBox1.Size = System.Drawing.Size(268, 20)
  21.                 self._textBox1.TabIndex = 0
  22.                 #
  23.                 # MainForm
  24.                 #
  25.                 self.ClientSize = System.Drawing.Size(331, 174)
  26.                 self.Controls.Add(self._textBox1)
  27.                 self.Name = "MainForm"
  28.                 self.Text = "Solution_1"
  29.                 self.ResumeLayout(False)
  30.                 self.PerformLayout()
  31.  
  32.  
  33. System.Windows.Forms.Application.Run(MainForm())               
  34.        
  35.  
  36. OUT = MainForm()._textBox1.Text.ToString()
  37.  
Название: Re: Получение текста после завершения .Net Winform приложения
Отправлено: Александр Ривилис от 28-12-2015, 02:16:32
Попробуй вместо:
Код - Python [Выбрать]
  1. System.Windows.Forms.Application.Run(MainForm())
используй:
Код - Python [Выбрать]
  1. MainForm.ShowDialog()
P.S.: С синтаксисом Python я не знаком, но смысл в том, что нужно создать объект MainForm, вызвать его метод ShowDialog, для того чтобы можно было ввести строку и затем уже получить её значение из этого объекта. Где-то так:
Код - Python [Выбрать]
  1. dialog = MainForm
  2. dialog.ShowDialog()
  3. OUT = dialog._textBox1.Text.ToString()

 
Название: Re: Получение текста после завершения .Net Winform приложения
Отправлено: Дмитрий Дронов от 28-12-2015, 02:40:19
Спасибо Вам огромное.
Действительно заработало.
Оказался единственный нюанс, о котором прочитал вот тут: ссылка (http://mkmra2.blogspot.com/2012/12/creating-graphical-user-interfaces-with.html)
Заключается он в том, что DialogResult не подгружается в стандартном пространстве Forms. Поэтому нужно прописать:
import System.Windows.Forms.DialogResult
-
В остальном - как Вы и сказали.
Полный рабочий код:
Код - Python [Выбрать]
  1. import System
  2. from System import *
  3. import clr
  4. bl = IN[0]
  5. clr.AddReference("System.Windows.Forms")
  6. clr.AddReference("System.Drawing")
  7. import System.Windows.Forms.DialogResult
  8.  
  9. class MainForm(System.Windows.Forms.Form):
  10.         def __init__(self):
  11.                 self.InitializeComponent()
  12.        
  13.         def InitializeComponent(self):
  14.                 self._textBox1 = System.Windows.Forms.TextBox()
  15.                 self.SuspendLayout()
  16.                 #
  17.                 # textBox1
  18.                 #
  19.                 self._textBox1.Location = System.Drawing.Point(24, 81)
  20.                 self._textBox1.Name = "textBox1"
  21.                 self._textBox1.Size = System.Drawing.Size(268, 20)
  22.                 self._textBox1.TabIndex = 0
  23.                 #
  24.                 # MainForm
  25.                 #
  26.                 self.ClientSize = System.Drawing.Size(331, 174)
  27.                 self.Controls.Add(self._textBox1)
  28.                 self.Name = "MainForm"
  29.                 self.Text = "Solution_1"
  30.                 self.ResumeLayout(False)
  31.                 self.PerformLayout()
  32.  
  33.  
  34. #System.Windows.Forms.Application.Run(MainForm.ShowDialog)             
  35. dialog = MainForm()
  36. dialog.ShowDialog()
  37.  
  38. OUT = dialog._textBox1.Text.ToString()
  39.  
Скриншот:
(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fdl3.joxi.net%2Fdrive%2F0005%2F3263%2F371903%2F151227%2Fa97334011b.png&hash=13c980991fe28b0442052e69a58d7f55)
Название: Re: Получение текста после завершения .Net Winform приложения
Отправлено: Александр Ривилис от 28-12-2015, 02:42:21
Значит и здесь интуиция меня не подвела. :)
Название: Re: Получение текста после завершения .Net Winform приложения
Отправлено: Дима_ от 28-12-2015, 09:41:31
Как это сделать? Как закрыть приложение так, чтобы текст введенный в ТекстБоксе сохранился?
Еще вариант - обработка события закрытия окна.
Название: Re: Получение текста после завершения .Net Winform приложения
Отправлено: Дмитрий Дронов от 28-12-2015, 17:16:23
Еще вариант - обработка события закрытия окна.
А в чем заключается этот вариант?
Вы могли бы его описать техническим языком программы?
Название: Re: Получение текста после завершения .Net Winform приложения
Отправлено: Виктор Чекалин от 28-12-2015, 18:40:22
Вы могли бы его описать техническим языком программы?
Думаю не стоит. в данном случае это плохой вариант.