locked
Как очистить textblock ? RRS feed

  • Вопрос

  • Тextblock не ограничений . Так вот вопрос как его очистить  ?

     public void newTextBlock(string content)
            {
                TextBlock textBlockName = new TextBlock();
                textBlockName.Text = content;
    
                trace.Children.Add(textBlockName);
            }
    newTextBlock("лялялялял");

    Сам ХАМЛ .

     <ScrollViewer Margin="10,370,0,0" Height="342" HorizontalAlignment="Left" Width="440" VerticalAlignment="Top">
            <StackPanel x:Name="trace" >
                <!-- your textBlock will be dynamically created here -->
            </StackPanel>
            </ScrollViewer>

    11 сентября 2013 г. 21:43

Ответы

  • Э.... Что то ваш последний ответ ничего не прояснил. Опишите какую логику вы пытаетесь реализовать. Что то в виде:

    1. При загрузке формы динамически создается 3 TextBlock-а.

    2. При нажатии на кнопку 1 должно происходить заполнение их данными.

    3. При нажатии на кнопку 2 необходимо считать данные из ... и ...

    Когда я пытаюсь реализовать ... вот таким кодом, происходит вот так.

    • Помечено в качестве ответа Panda_Gun 17 сентября 2013 г. 12:11
    12 сентября 2013 г. 15:11
    Отвечающий

Все ответы

  • Добрый день.

    Вы объявляете переменную для хранения TextBlock в методе и, соответственно, после выхода из этого метода переменная не доступна. Но, к счастью, вы сохраняете ссылку на этот TextBlock в детках у вашей StackPanel. Поэтому, вы можете применить вот такой код:

    foreach (var item in trace.Children.OfType<TextBlock>())
    {
        item.Text = "";
    }

    Он удалит текст во всех TextBlock внутри этой StackPanel. Если надо не во всех, то можно после OfType добавить Where и анализировать, чистить или нет.
    • Предложено в качестве ответа Oleg Kurzov 12 сентября 2013 г. 7:08
    12 сентября 2013 г. 7:05
    Отвечающий
  • Или же используйте 1 TextBlock и вставляйте в него Run(+ для переносов LineBreak). Можно будет просто задать текстблоку имя и чистить его динамически сгенерированный контент.
    12 сентября 2013 г. 8:55
  •  

    Вопрос , как очистить не отдельной кнопкой , а допустим  при нажатии - чистит - потом записывает новую информацию 

    12 сентября 2013 г. 12:01
  • Вставьте код очистки, перед присвоением новых значений.
    12 сентября 2013 г. 13:33
    Отвечающий
  • Так ведь он там и стоит .  

    Есть пустое место. 

    Нужно очистить все текст блоки 

    • Изменено Panda_Gun 12 сентября 2013 г. 13:48
    12 сентября 2013 г. 13:44
  • Тогда я не понял, в чем у вас проблема. Что у вас не получается?
    12 сентября 2013 г. 13:46
    Отвечающий
  • Он  чистит текст блоки , на следующий вывод идет на тот корый последним был очищен .
    12 сентября 2013 г. 14:14
  • Э.... Что то ваш последний ответ ничего не прояснил. Опишите какую логику вы пытаетесь реализовать. Что то в виде:

    1. При загрузке формы динамически создается 3 TextBlock-а.

    2. При нажатии на кнопку 1 должно происходить заполнение их данными.

    3. При нажатии на кнопку 2 необходимо считать данные из ... и ...

    Когда я пытаюсь реализовать ... вот таким кодом, происходит вот так.

    • Помечено в качестве ответа Panda_Gun 17 сентября 2013 г. 12:11
    12 сентября 2013 г. 15:11
    Отвечающий
  • 1. При загрузке формы динамически создается ЕН TextBlock-ов ЗАвисит от длинны получаемых данных .

    2. При нажатии на кнопку 1 должно происходить заполнение их данными. 

    3. При Заполнении текст Боксов инными данными , должно происходить удаление старых , и запись новых  даных в той же текст блок . 


    • Изменено Panda_Gun 12 сентября 2013 г. 16:34 Ошибся
    12 сентября 2013 г. 16:02
  • Я правильно понимаю, что a, b и c это у вас компоненты для ввода данных?

    Если да, то можете воспользоваться методом ElementAt для получения нужного элемента и присвоения ему значения.

    Но, я бы просто при генерации элементов записал бы ссылки на них в поле типа массив и работал бы без всяких заморочек с этим массивом.

    • Предложено в качестве ответа Oleg Kurzov 13 сентября 2013 г. 13:40
    12 сентября 2013 г. 17:05
    Отвечающий
  • Я понимаю что вы опытный программист , но все же по проще как то можно   , а лучше куда встаивть код  , который вы посоветовали. 
    12 сентября 2013 г. 17:08
  • Panda_Gun, Алексей спрашивает у Вас, что переменные с именами "а", "b" и "c" это Ваши TextBox"ы. В которые пользователь будет вводить цифры.

    С использованием метода ElementAt, который есть у любой коллекции.(в нашем случае коллекция это Children Вашей стекпанели "trace"). То есть, просто написать:

    var stackPanelChildrens = trace.Children.OfType<TextBox>();
               var textBlockxA = stackPanelChildrens.ElementAt(0);

    Дальше, Алексей рекомендует Вам сохранять каждый созданный TextBlock

    в поле класса, т.е. создаете private List<TextBlock> myDynamicTextBlocks = new List<TextBlock>(); (В этом случае не нужно использовать ElementAt)

    и при создании каждого элемента, записываете его в myDynamicTextBlocks, это позволит Вам при необходимости быстренько пробежать по списку и отредактировать текст текстблоков, а не лезть в Children у StackPanel и менять её.

    P.S.: Если это всё, что Вы хотели узнать, пожалуйста, пометьте как "Ответ" ответ Алексея, а не мой. Спасибо.





    • Изменено Oleg Kurzov 13 сентября 2013 г. 13:31
    13 сентября 2013 г. 13:16
  • Да мне просто надо очистить еное количество текст блоков , и а б с это текстбоксы . 
    13 сентября 2013 г. 13:35
  • Вот теперь бегайте по коллекции myDynamicTextBlocks и чистите все текстблоки. Например:

    foreach(var textBlock in myDynamicTextBlocks)
    
    {
    
    	textBlock.Text = string.Empty;
    
    }

    а заполнять эту коллекцию можно вот так:

    public void newTextBlock(string content)
            {
                TextBlock textBlockName = new TextBlock();
    this.myDynamicTextBlocks.Add(textBlockName);
                textBlockName.Text = content;
    
                trace.Children.Add(textBlockName);
            }


    • Изменено Oleg Kurzov 13 сентября 2013 г. 13:41
    13 сентября 2013 г. 13:40
  • Вот теперь бегайте по коллекции myDynamicTextBlocks  ? ?? 
    13 сентября 2013 г. 13:52
  • Я ведь выше писал, что когда Вы начинаете генерировать текстблоки, просто создайте в поле коллекцию текстблоков. Я назвал её "myDynamicTextBlocks".

    private List<TextBlock> myDynamicTextBlocks = new List<TextBlock>();

    Потом, когда генерируете динамически текстблоки, сохраняете каждый в эту коллекцию:

    public void newTextBlock(string content)
            {
                TextBlock textBlockName = new TextBlock();
                this.myDynamicTextBlocks.Add(textBlockName);//сохраняем ссылку на текстблок в коллекцию
                textBlockName.Text = content;
    
                trace.Children.Add(textBlockName);
            }

    Дальше, создайте такой метод и вызовите его, когда Вам нужно почистить сгенерированные текстблоки:

    private void ClearTextBlocs()
    {  
       foreach(var textBlock in this.myDynamicTextBlocks)
       {
           textBlock.Text = string.Empty;
       }
    }
    • Изменено Oleg Kurzov 13 сентября 2013 г. 14:12
    13 сентября 2013 г. 14:12
  • Оно то удаляет инф . Но остается пустое место . . . В начале , после старых текстблоков.

    • Изменено Panda_Gun 13 сентября 2013 г. 14:32
    13 сентября 2013 г. 14:15
  • Вы можете собрать демо проект, что бы можно было код посмотреть и подравить?

    13 сентября 2013 г. 14:38
  • К сожалению нет ,

    <ScrollViewer Margin="10,370,0,0" Height="342" HorizontalAlignment="Left" Width="440" VerticalAlignment="Top">
            <StackPanel x:Name="trace" >
                тут блоки
            </StackPanel>
            </ScrollViewer>

    инфа идет массивом . Поэтому нужно много текст блоков .

    13 сентября 2013 г. 14:44
  • А где тогда расположены ТекстБоксы и как они влияют на эти текстблоки, которые генерятся динамически?
    13 сентября 2013 г. 14:48
  • Из текстбоксов идут некие числа , которые расчета  ,выдают в массивы .Массивы ограниченные . Огриниченные задают из одного текстбокса . 

    	    <TextBox FontSize="18" InputScope="Number" Name="a" Height="61" HorizontalAlignment="Left" Margin="8,28,0,0"  Text="" VerticalAlignment="Top" Width="444" />
                <TextBox FontSize="18" InputScope="Number" Name="b" Height="61" HorizontalAlignment="Left" Margin="8,108,0,0"  Text="" VerticalAlignment="Top" Width="442" />
                

    13 сентября 2013 г. 14:54
  • up   
    14 сентября 2013 г. 9:22
  • Сделайте, пожалуйста, новый проект с аналогией Вашей страницы. Нам не нужен весь Ваш проект, только демо этой проблемной страницы со всеми текстбоксами и текстблоками. Если Вы данные берете с веб-сервиса, то сделайте заглушки.
    15 сентября 2013 г. 8:23
  • http://www.justbeamit.com/ik9us
    15 сентября 2013 г. 9:57