Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Запись из одного текстового поля в другое  (Прочитано 20244 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Gor
Постоялец

ru
Offline Offline

« : 14-08-2012 08:23 » 

Добрый!

Создаю мастер на С# (Начало> , <Предыдущая Следующая> и т.д.).
На странице WizardPage2 есть текстовое поле, нажимается кн. "Обзор...".

Код: (C#)
public partial class WizardPage2
{
        . . .

        //Обработчик событий для кнопки "Обзор..."
      void BrowseButtonOnClick(object sender, RoutedEventArgs args)
      {
          DirectoryPage page = new DirectoryPage();
          page.Return += PageOnReturn;
          NavigationService.Navigate(page);
      }

        void PageOnReturn(object sender, ReturnEventArgs<String> args)
      {
            // txtboxFavoriteDir – это Name текстового поля страницы WizardPage2
            //(в XAML коде)
          txtboxFavoriteDir.Text = …………………………………; //сюда нужно записать текст
      }

        . . .
}
Открывается страница DirectoryPage, в текстовое поле которой, вводится како-то текст. При закрытии этого окна, текст из текстового поля страницы DirectoryPage должен попадать в текстовое поле страницы WizardPage2.

Код: (C#)
public partial class DirectoryPage : PageFunction<String>
{
      public DirectoryPage()
      {
          InitializeComponent();
            // txtbox – это Name текстового поля страницы DirectoryPage
            //(в XAML коде)
          txtbox.SelectionChanged += OnSelectionChanged;
      }
       
        //Обработчик события SelectionChanged
      void OnSelectionChanged(object sender, RoutedEventArgs args)
      {
         
      }

        //Обработчик кнопки "Да" для закрытия окна
      void OKButtonOnClick(object sender, RoutedEventArgs args)
      {
          OnReturn(new ReturnEventArgs<String>());
      }
}
Пытался работать через свойства, не вышло. Видимо способ работы с Page другой, чем с Windows. Пожалуйста, подскажите, что здесь можно сделать?

P.S. Надеюсь, вопрос задан понятно.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 14-08-2012 08:31 » 

Ничего не понял. Это ASP.NET? Почему противопоставляется Windows?
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #2 : 14-08-2012 08:39 » 

Я тоже ничего не понял, но, судя по всему, проблема стара как мир: использование UI для хранения данных.

Gor, попробуй разделить окна (контролы, etc) и данные, которые в них должны отображаться/вводиться. Те создай контейнер для хранения данных, доступ на который получат все страницы (окна, контролы, etc) твоего мастера.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Gor
Постоялец

ru
Offline Offline

« Ответ #3 : 15-08-2012 06:07 » 

Спасибо за участие.
Это не ASP.NET. Имеется ввиду не Windows, а Window (извиняюсь). Я предположил, что работа с XAML- кодом на основе
Код: (Text)
<Page x:Class="ComputerDatingWizard.WizardPage2"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="WizardPage2">
    <Grid>
        . . .
    </Grid>

  и 
Код: (Text)
<Window x:Class="ComputerDatingWizard.Window"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window">
    <Grid>
        . . .
    </Grid>

разные. В <Window .../> через свойства все прекрасно работает, а здесь застрял (это мой первый мастер). На странице (class DirectoryPage : PageFunction<String>) в обработчике OnSelectionChanged заносится (с клавиатуры) инфа в текстовое поле txtbox.Text (Name=”txtbox”). По закрытию страницы (class DirectoryPage : PageFunction<String>) инфа попадает в текстовое поле txtboxFavoriteDir.Text страницы (class WizardPage2). А она не попадает.
Еще раз извините если бестолково задал вопрос. Не очень понял твою мысль Джон, нельзя ли её описать немного «ниже».
Спасибо!
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #4 : 15-08-2012 07:27 » 

Открывается страница DirectoryPage, в текстовое поле которой, вводится како-то текст. При закрытии этого окна, текст из текстового поля страницы DirectoryPage должен попадать в текстовое поле страницы WizardPage2.

Где у тебя хранится текст, который ввели в тесктовое поле на странице DirectoryPage?

Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Gor
Постоялец

ru
Offline Offline

« Ответ #5 : 15-08-2012 16:09 » 

В текстовое поле текст вводится с клавиатуры и соответственно попадает в txtbox.Text  (XAML код <TextBox Name=”txtbox”/>). Нужно, что бы он попал в txtboxFavoriteDir.Text. Пытался использовать свойства, не выходит. Из поля txtbox.Text  больше никуда не писал (не считая работу со свойствами).
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #6 : 16-08-2012 08:27 » 

Вот про это я и говорю. У тебя текст хранится в  Txtbox. Это не есть гут. Элементы управления (контролы) предназначены исключительно для ввода информации пользователем и/или для её отображения, но не для хранения данных. Пойдём дальше. Допустим, в твоём мастере ты на странице Page1 изменяешь текст в Txtbox1, затем переходишь на страницу Page2, на которой находится Txtbox2. Допустим, каким-то образом тебе удалось СКОПИРОВАТЬ текст из Txtbox1 в Txtbox2. Те у тебя он уже хранится в двух экземплярах. Теперь ты меняешь текст в Txtbox2 и возвращаешься на Page1. Как теперь быть с Txtbox1? Надо каким-то образом обеспечеть доставку текста из Txtbox2 в Txtbox1. И тд.

Более разумно сделать контейнер данных. Допустим, для данного случая, строковую переменную, доступ к которой имеют и Page1, и Page2. Тогда каждый контрол на этих страницах занимается только лишь чтением и записью СВОИХ данных в эту переменную, ничего не подозревая о существовании друг друга. И если тебе, вдруг, на странице PageN опять понадобятся эти данные, то ты просто обратишься к этой переменной.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Gor
Постоялец

ru
Offline Offline

« Ответ #7 : 17-08-2012 12:58 » 

Создал отдельный класс:

Код: (C#)
namespace ComputerDatingWizard
{
    public class Container
    {
        string txtcontainer;

        public string Txtcontainer
        {
            get
            {
                return txtcontainer;
            }
            set
            {
                txtcontainer = value;
            }
        }
    }
}
пишу через него. Все равно не пишет, обнуляется.
……………………………….
Код: (C#)
container.Txtcontainer = this.txtbox.Text;
……………………………………..
Код: (C#)
txtboxFavoriteDir.Text = container.Txtcontainer;
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 17-08-2012 13:36 » 

Gor, ну поставь точку останова в свойстве своего контейнера и посмотри по стеку вызовов, кто его обнуляет.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #9 : 17-08-2012 14:14 » 

А где находится экземпляр (инстанция) этого контейнера?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Gor
Постоялец

ru
Offline Offline

« Ответ #10 : 17-08-2012 17:51 » 

Господа!
Во-первых: спасибо за терпение!
Во-вторых: если правильно понял твой вопрос, Джон, то экземпляр класса Container находится вклассе DirectoryPage:

Код: (C#)
public partial class DirectoryPage : PageFunction<String>
{
      Container container;
      ......................        
        //Обработчик события SelectionChanged
      void OnSelectionChanged(object sender, RoutedEventArgs args)
      {
          container = new Container();
          container.Txtcontainer = this.txtbox.Text;
      }

       .....................
}
Твой совет, Dimka, смогу опробовать только в понедельник. Будет доступ к программе.
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #11 : 17-08-2012 19:38 » 

Во-вторых: если правильно понял твой вопрос, Джон, то экземпляр класса Container находится вклассе DirectoryPage:

Этого я и опасался. А как обеспечивается доступ к нему в классе WizardPage2?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Gor
Постоялец

ru
Offline Offline

« Ответ #12 : 19-08-2012 18:05 » 

Код: (C#)
public partial class WizardPage2
{
        Container container;
        . . .

        void PageOnReturn(object sender, ReturnEventArgs<String> args)
        {
              txtboxFavoriteDir.Text = container.Txtcontainer;            
        }

        . . .
}
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #13 : 19-08-2012 18:49 » 

Gor, Ты хоть примерно представляешь, что ты делаешь? У тебя есть один объект класса Container в классе WizardPage2, и СОВСЕМ ДРУГОЙ объект класса Container в классе DirectoryPage. Несмотря на то, что они оба являются инстанциями одного класса и носят одинаковое имя, это два РАЗНЫХ объекта.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Gor
Постоялец

ru
Offline Offline

« Ответ #14 : 20-08-2012 06:30 » 

Не знаю, Джон, где не объявлю экземпляр класса, всё не слава богу. Может объявить экземпляр класса, например, DirecroryPage в классе Container?
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #15 : 20-08-2012 07:59 » 

Gor, вобще-то так программировать нельзя. Это даже не метод научного тыка, потому что научный подход подразумевает хоть какую-то логику в действиях. Ты вобще чем занимаешься, в смысле учишься, работаешь, в связи с чем это задание?

А пока... Представь себе что пользовательский интерфейс (окна, формы) - две твои странички - это две большие коробки. В каждой из них у тебя находятся одна маленькая коробочка с именем container. Ты пишешь на одной бумажке текст и кладёшь в одну маленькую коробочку одной большой коробки, а на другой бумажке ты пишешь другой текст, и кладёшь её в маленькую коробочку, которая находится в другой большой коробке. Бумажки с текстом - это твои данные. Ессно, что это две разные бумажки. И если, например, ты уничтожишь пользовательский интерфейс - выбросишь большие коробки, то и данные твои тоже пропадут.

Задача заключается в том, чтобы сохранить данные и иметь возможность работать с ними, например сохранять на диск, без всякого пользовательского интерфейса. И если вернуться к примеру с коробочками, то что необходимо сделать в твоём случае?
« Последнее редактирование: 20-08-2012 08:03 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Gor
Постоялец

ru
Offline Offline

« Ответ #16 : 20-08-2012 14:47 » 

Если говорить этим языком, то что касается маленьких коробочек, видимо не нужно их держать в больших коробках. Да и маленькая коробочка, наверное, должна быть одна с текстом на бумажке. При уничтожении одной большой коробки маленькая попадает в другую большую. Хотя возможно опять ошибаюсь.
Писать в файл не хочется.
Есть решение:
Код: (C#)
void PageOnReturn(object sender, ReturnEventArgs<String> args)
{
        txtboxFavoriteDir.Text = (sender as DirectoryPage).txtbox.Text;
}
Но оно меня не устраивает, т.к. небезопасно и т.д. Хочется решить через класс Container.
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #17 : 20-08-2012 16:05 » 

Если говорить этим языком, то что касается маленьких коробочек, видимо не нужно их держать в больших коробках.

Не "видимо", а только так!!!

Цитата
Да и маленькая коробочка, наверное, должна быть одна с текстом на бумажке.

5+ !!!

Цитата
При уничтожении одной большой коробки маленькая попадает в другую большую.

А если маленькая будет существовать вне этих коробок, то есть вобще в них не попадая? Существуя, так сказать, самостоятельно, например, как объект САМОЙ большой коробки, называемой Программой. Тогда можно уничтожить все окна, а данные всё-равно останутся и будут существовать на протяжении всей жизни программы.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Gor
Постоялец

ru
Offline Offline

« Ответ #18 : 21-08-2012 06:27 » 

Ни фига не выходит.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #19 : 21-08-2012 09:41 » 

Gor, это издержки программирования при помощи всяких мастеров, дизайнеров, визардов и т.п. Начинающий попросту не видит структуры всей программы, а видит только одни отрывочные куски, куда ему предлагается вставлять свой код.

Попробуй написать маленькую программу вроде крестиков-ноликов, но без мастеров и дизайнеров и даже без VS. Сам, с нуля. Подглядывая в то, какой и где код сгенерирован мастерами в твоей большой программе.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Gor
Постоялец

ru
Offline Offline

« Ответ #20 : 21-08-2012 12:14 » 

Думаю, ты прав Dimka. Но, на это уйдет время. Сейчас нельзя ли намекнуть великодушно, как сделать, куда устроить этот экземпляр объекта.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #21 : 21-08-2012 17:25 » 

Gor, тебе уже намекали: снаружи по отношению к обеим страницам. Где снаружи - не знаю, ты остальные части программы не показывал.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Gor
Постоялец

ru
Offline Offline

« Ответ #22 : 21-08-2012 18:03 » 

Где бы снаружи я не объявлял экземпляр класса, все равно в этих классах пишет ошибку "не указана ссылка на объект". Т.е. требует создать экземпляры класса Container и в классе DirectoryPage и в классе WizardPage2.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #23 : 21-08-2012 20:47 » 

Gor, всё ещё хуже, чем Джон предполагал. Ты, похоже, не понимаешь, что классы - это ссылочные типы данных, и объявление переменной класса - это вовсе не создание объекта, а просто объявление ссылки на объект. Чем ты эту ссылку инициализируешь: новым объектом, созданным через new, или уже имеющимся где-то снаружи - это уже дело хозяйское. Но разные переменные в разных местах ссылаются на один и тот же объект (если ты так напишешь).
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #24 : 22-08-2012 09:54 » 

Gor, полностью согласен с Димкой. Начни с простого.

Но, на это уйдет время.

Не аргумент. Более того, ты сам себя обманываешь. Времени это займет гораздо меньше, чем ты УЖЕ потратил на решение этой "проблемы". Зато польза будет огромная, ибо: один раз сделать самому, в 1000 раз лучше, чем прочитать, увидеть или услышать от кого-нибудь.

Сделай три класса, и попробуй в двух из них работать с одной инстанцией третьего класса. На примере этого кода мы поможем тебе разобраться. А "великодушно намекнуть" это: а) медвежья услуга; б) как Димка уже сказал, не зная остального кода или хотя бы структуры программы, сделать практически невозможно. Можно только гадать на кофейной гуще, а это уж тебе совсем не надо.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Gor
Постоялец

ru
Offline Offline

« Ответ #25 : 22-08-2012 16:05 » 

Gor, всё ещё хуже, чем Джон предполагал.
Ты прав Dimka, дела совсем хуже некуда. Хотя "проблему" решил. Ларчик открывался очень просто.
Gor, тебе уже намекали: снаружи по отношению к обеим страницам. Где снаружи - не знаю, ты остальные части программы не показывал.
Так и не надо видеть др. части программы. Этот вопрос решается принципиально одинаково везде (хотя решение не одно). Да и с коробками Джон, мы перемудрили. Есть хорошее решение когда маленькая коробочка с бумажкой, находится в одной большой.
Поменьше бы нравоучений, вы же не воспитатели, я надеюсь.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #26 : 22-08-2012 16:24 » 

Цитата: Gor
вы же не воспитатели, я надеюсь
Зря надеешься. Название "Начинающим" как бы намекает, что помимо начинающих есть ещё другие.

Цитата: Gor
Так и не надо видеть др. части программы. Этот вопрос решается принципиально одинаково везде (хотя решение не одно). Да и с коробками Джон, мы перемудрили. Есть хорошее решение когда маленькая коробочка с бумажкой, находится в одной большой.
Тогда у тебя не две страницы мастера, а что-то другое.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #27 : 22-08-2012 17:05 » 

Чёт я сомневаюсь, что решение действительно хорошее, но тебе конечно видней. Успехов.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines