Получение текста после завершения .Net Winform приложения

Автор Тема: Получение текста после завершения .Net Winform приложения  (Прочитано 8181 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Дмитрий ДроновАвтор темы

  • ADN OPEN
  • Сообщений: 20
  • Карма: 3
  • Finder
Здравствуйте.
Такой вопрос к специалистам:
Как можно получить значение вводимого текста после завершения .Net Winform приложения?
-
Опишу подробней что хочу и что получилось сделать:
1. Создал в среде Sharp Develop простенькое окошко:

2. Затем скопировал код в DynamoSandbox-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.  

Отмечено как Решение Дмитрий Дронов 28-12-2015, 02:49:05

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Попробуй вместо:
Код - 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()

 
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий ДроновАвтор темы

  • ADN OPEN
  • Сообщений: 20
  • Карма: 3
  • Finder
Спасибо Вам огромное.
Действительно заработало.
Оказался единственный нюанс, о котором прочитал вот тут: ссылка
Заключается он в том, что 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.  
Скриншот:

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Значит и здесь интуиция меня не подвела. :)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Как это сделать? Как закрыть приложение так, чтобы текст введенный в ТекстБоксе сохранился?
Еще вариант - обработка события закрытия окна.

Оффлайн Дмитрий ДроновАвтор темы

  • ADN OPEN
  • Сообщений: 20
  • Карма: 3
  • Finder
Еще вариант - обработка события закрытия окна.
А в чем заключается этот вариант?
Вы могли бы его описать техническим языком программы?

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Вы могли бы его описать техническим языком программы?
Думаю не стоит. в данном случае это плохой вариант.