Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > WPF, передать содержимое textBox в Label


Автор: Hayate 30.6.2011, 11:01
Допустим, есть страница, в 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 я понял, что это делается с помощью связывания данных, но реализация у меня хромает, так как никогда ничего сложнее хелло мир на пхп не писал.
Пробовал разные варианты, но ни один рабочим не оказался.

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

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

Автор: Hayate 2.7.2011, 12:47
Цитата(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);
, пишу ещё чего-нибудь - не работает. Как правильно надо писать?

Автор: Экскалупатор 2.7.2011, 13:48
Hayate, в начале раздела для новичков есть закрепленная тема http://forum.vingrad.ru/forum/topic-52713.html. очень полезно почитать. там эта тема обсуждается уже очень долго.

Автор: Hayate 5.7.2011, 18:20
Пытаюсь делать как написано тут:
http://forum.vingrad.ru/index.php?showtopic=52713&view=findpost&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);
        }


Не совсем понимаю, чего ему не нравится, и класс и метод статические. Чего ему надо?

Автор: Экскалупатор 6.7.2011, 00:38
ну, если у тебя класс 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 нужные данные через метод или свойства? т.е. сначала создать класс, потом передать в него все что нужно(или можно прямо в конструкторе) и потом показать его пользователю.

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

Точно, так работает. Слегка не в себе последнее время, туплю дико. Спасибо за помощь.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)