Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> WPF, передать содержимое textBox в Label, между страницами 
:(
    Опции темы
Hayate
Дата 30.6.2011, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 26.3.2008

Репутация: нет
Всего: нет



Допустим, есть страница, в textBox1 вводится текст:
Код

<Page x:Class="Navigation.Page1"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300"
    Title="Page1">

    <Grid Background="#FFBCE2D6">
        <Label Content="Page 1" Height="36" HorizontalAlignment="Left" Margin="66,34,0,0" Name="label1" VerticalAlignment="Top" Width="116" />
        <Button Content="Button" Height="38" HorizontalAlignment="Left" Margin="102,220,0,0" Name="button1" VerticalAlignment="Top" Width="96" Background="#FFDFEFEA" Click="button1_Click" />
        <TextBox Height="32" HorizontalAlignment="Left" Margin="118,86,0,0" Name="textBox1" VerticalAlignment="Top" Width="115"/>
        <Label Content="Данные" Height="32" HorizontalAlignment="Left" Margin="18,87,0,0" Name="label2" VerticalAlignment="Top" Width="69" />
    </Grid>
</Page>


И есть вторая страница, которая загружается в NavigationWindow после клика по кнопке button1: 
Код

<Page x:Class="Navigation.Page2"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300"
    Title="Page2">

    <Grid Background="#FFC73D3D">
        <Label Content="Page 2" Height="42" HorizontalAlignment="Left" Margin="70,24,0,0" Name="label1" VerticalAlignment="Top" Width="121" />
        <Button Content="Button" Height="39" HorizontalAlignment="Left" Margin="88,220,0,0" Name="button1" VerticalAlignment="Top" Width="101" />
        <Label Height="28" HorizontalAlignment="Left" Margin="114,128,0,0" Name="label2" VerticalAlignment="Top" Content="Всякий разный Binding" />
    </Grid>
</Page>


Хочется, чтобы label2 в загрузившейся странице содержал текст из textBox1. Покурив msdn я понял, что это делается с помощью связывания данных, но реализация у меня хромает, так как никогда ничего сложнее хелло мир на пхп не писал.
Пробовал разные варианты, но ни один рабочим не оказался.
PM MAIL   Вверх
Kilgort
Дата 1.7.2011, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 1.7.2011

Репутация: нет
Всего: нет



Ты с ООП не знаком? Мне кажется надо обучаться с низов и тогда такие вопросы отпадут сами собой.

По существу, label2.Content = textbox1.Text?

PM MAIL   Вверх
Hayate
Дата 2.7.2011, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 26.3.2008

Репутация: нет
Всего: нет



Цитата(Kilgort @ 1.7.2011,  09:18)
Ты с ООП не знаком? Мне кажется надо обучаться с низов и тогда такие вопросы отпадут сами собой.

По существу, label2.Content = textbox1.Text?

В общих чертах знаком. Насчёт низов - пробовал многократно. Пока читаешь фолианты низов вообще забываешь, что хотел сделать, проверено.
Намного понятнее бывает когда берёшь и сразу делаешь.

Ну ладно, есть вот допустим страница FirstPage с текстовым полем. Если в обработчик клика по кнопке запихать вывод введённого текста, то всё работает.

Код

private void button1_Click(object sender, RoutedEventArgs e)
        {            
            MessageBox.Show(FirstName.Text);
        }


Допустим, мы хотим сделать такой же MessageBox и на другой странице. Пишу, например 
Код

MessageBox.Show(Page.FirstName.Text);
, пишу ещё чего-нибудь - не работает. Как правильно надо писать?
PM MAIL   Вверх
Экскалупатор
Дата 2.7.2011, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 5
Всего: 24



Hayate, в начале раздела для новичков есть закрепленная тема Как обратиться к объекту другой формы. очень полезно почитать. там эта тема обсуждается уже очень долго.
PM MAIL ICQ   Вверх
Hayate
Дата 5.7.2011, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 26.3.2008

Репутация: нет
Всего: нет



Пытаюсь делать как написано тут:
http://forum.vingrad.ru/index.php?showtopi...st&p=841798

Здесь вводим текст:
Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace test
{
    /// <summary>
    /// Логика взаимодействия для StartPage.xaml
    /// </summary>

    public static class CallBack
    {
        public delegate void CallBackEvent(string textfromTextBox);
        public static CallBackEvent CallBackHandler;
    }

    public partial class StartPage : Page
    {
        public StartPage()
        {
            InitializeComponent();
        }
        

        private void button1_Click(object sender, RoutedEventArgs e)
        {            
            MessageBox.Show(FirstName.Text);            
            CallBack.CallBackHandler(FirstName.Text);
            ShowFIO PageFIO = new ShowFIO();
            this.NavigationService.Navigate(PageFIO);
        }
    }
}


Тут хотим его увидеть:
Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace test
{
    /// <summary>
    /// Логика взаимодействия для ShowFIO.xaml
    /// </summary>
    ///    

    public partial class ShowFIO : Page
    {
        public string TextBoxText;

        public ShowFIO()
        {
            InitializeComponent();
            CallBack.CallBackHandler = new CallBack.CallBackEvent(this.getText);
            MessageBox.Show(this.TextBoxText);            
        }

        

            // функция-обработчик
    private void getText(string textReturnedFromDialog)
    {
        // нужная функциональность, допустим, запись в поле класса
        this.TextBoxText = textReturnedFromDialog;
    }
        
        
    }
}


При отладке получаю такую ошибку:
System.NullReferenceException не обработано
  Message=Ссылка на объект не указывает на экземпляр объекта.

Код

        private void button1_Click(object sender, RoutedEventArgs e)
        {            
            MessageBox.Show(FirstName.Text);            
            [color=red]CallBack.CallBackHandler(FirstName.Text);[/color] //ошибка здесь
            ShowFIO PageFIO = new ShowFIO();
            this.NavigationService.Navigate(PageFIO);
        }


Не совсем понимаю, чего ему не нравится, и класс и метод статические. Чего ему надо?
PM MAIL   Вверх
Экскалупатор
Дата 6.7.2011, 00:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 5
Всего: 24



ну, если у тебя класс ShowFIO создается ПОСЛЕ вызова его метода то очевидно что ссылки на него не будет...
Код

 private void button1_Click(object sender, RoutedEventArgs e)
        {            
            MessageBox.Show(FirstName.Text);            
            CallBack.CallBackHandler(FirstName.Text);//вызываем обработчик в несуществующем классе
            ShowFIO PageFIO = new ShowFIO(); //создаем класс в котором будем подписываться на событие
            this.NavigationService.Navigate(PageFIO);
        }


как вариант можно просто поменять местами строки. но вообще, коль уж имеет место такое жествое связывание форм(когда в обработчике одной формы вызывается другая) то не проще ли просто передавать в класс ShowFIO нужные данные через метод или свойства? т.е. сначала создать класс, потом передать в него все что нужно(или можно прямо в конструкторе) и потом показать его пользователю.
PM MAIL ICQ   Вверх
Hayate
Дата 6.7.2011, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 26.3.2008

Репутация: нет
Всего: нет



Цитата(Экскалупатор @ 6.7.2011,  00:38)
как вариант можно просто поменять местами строки. но вообще, коль уж имеет место такое жествое связывание форм(когда в обработчике одной формы вызывается другая) то не проще ли просто передавать в класс ShowFIO нужные данные через метод или свойства? т.е. сначала создать класс, потом передать в него все что нужно(или можно прямо в конструкторе) и потом показать его пользователю.

Точно, так работает. Слегка не в себе последнее время, туплю дико. Спасибо за помощь.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0846 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.