Wątek zablokowany 2023-03-22 19:48 przez Ktos.

Wątek przeniesiony 2023-03-16 09:10 z C/C++ przez Ktos.

Wyświetlanie dynamicznych wartości w polu tekstowym w formularzu

0

Witam,
Proszę o pomoc. Przekazuję stringa do wyświetlenia w textBox1.Text różnymi metodami oraz sposobami z innych klas. Wartość .Text fizycznie zmienia się w kontrolce jednakże nie wyświetla się w textBox1 w formie. Przekazywanie wartości poprzez sender, e wyświetlane są prawidłowo np. przy zastosowaniu:

private void button8_Click(object sender, EventArgs e)
{
    textBox1.Text = "cośtam"; // tutaj wszystko dziła.
}

Poniższa forma przekazuje stringa do textBox1, jednakże nie jest wyświetlana w komórce, przykład jednej z metod:

Form1 forma_1 = new Form1();
forma_1.textBox1.Text = textPassedCSSRAsync;

poprzez podprogram nie działa:

public void ReadDataSpeech()
{  
   textBox1.Text = tekst_rec;
   Console.WriteLine($"isReadDataSpeech()! + tekst_pobr  " + tekst_rec);
   textBox1.Refresh();
}

nie działa także:

public void textBox1_TextChanged(object sender, EventArgs e)
{
   textBox1.Text = CSRAsync.GetText;
}

Ten przypadek zmienia także wartość .Text ale nie wyświetla w formie.

Proszę o pomoc jak wyświetlić dane po przekazaniu stringa.

VB2022.

Pozdrawiam

0

Dzięki za zainteresowanie. Kod jest mega rozbudowany. Stworze coś w podstawie i prześle niebawem

0

Jeżeli robisz coś takiego:

Form1 forma_1 = new Form1();
forma_1.textBox1.Text = textPassedCSSRAsync;

To tworzysz nową formatkę, w niej coś zmieniasz, ale tej formatki nie pokazujesz i jest to kompletnie nowe coś.

0
Ktos napisał(a):

Jeżeli robisz coś takiego:

Form1 forma_1 = new Form1();
forma_1.textBox1.Text = textPassedCSSRAsync;

To tworzysz nową formatkę, w niej coś zmieniasz, ale tej formatki nie pokazujesz i jest to kompletnie nowe coś.

ok.

0

W załączeniu przykładowy program z kodem. Proszę podpowiedzcie jak przenieść dane z klasy do textBox w Form1 po wyzwoleniu button2.
Wywołując klase:

private void button2_Click(object sender, EventArgs e)
        {
            ClassTest.Calc();
        }

w której (musi być statyczna oraz asynchroniczna):

public static async Task Calc()
        {
            Form1 form1 = new Form1();
            form1.textBox1.Text = "ex1";
            form1.textBox2.Text = "ex2";
            if (form1.checkBox1.Checked == true)
            {
                form1.textBox1.Text = "exWCb1";
                form1.textBox2.Text = "exWCb2";
            }
        }

Z klasy dane maja zostać przekazane do textBoxów w Form1 - bez rezultatu. Natomiast dane widoczne są w zdarzeniu textBox1 i textBox2 (widoczne w konsoli)

Poniżej cały kod:

Form1.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Windows.Forms.VisualStyles.VisualStyleElement.Button;

namespace TextBox
{
    public partial class Form1 : Form
    {
        
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            textBox1.Text = "ex1";
            textBox2.Text = "ex2";
            
        }

        private void button2_Click(object sender, EventArgs e)
        {
            ClassTest.Calc();
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            Console.WriteLine("DatatB1: " + textBox1.Text);
        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {
            Console.WriteLine("DatatB1: " + textBox2.Text);
        }
    }
}

Klasa

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace TextBox
{
    
    public class ClassTest
    {
        
        public static async Task Calc()
        {
            Form1 form1 = new Form1();
            form1.textBox1.Text = "ex1";
            form1.textBox2.Text = "ex2";
            if (form1.checkBox1.Checked == true)
            {
                form1.textBox1.Text = "exWCb1";
                form1.textBox2.Text = "exWCb2";
            }
        }
    }
   
}

Pozdrawiam
TextBox.rar

0
porters napisał(a):
Ktos napisał(a):

Jeżeli robisz coś takiego:

Form1 forma_1 = new Form1();
forma_1.textBox1.Text = textPassedCSSRAsync;

To tworzysz nową formatkę, w niej coś zmieniasz, ale tej formatki nie pokazujesz i jest to kompletnie nowe coś.

ok.

No wcale nie ok, skoro dostałeś odpowiedź, a jednocześnie nic z nią nie zrobiłeś. Wewnątrz ClassTest.Calc() dodaj na końcu np. form1.ShowDialog();.

0

Wybacz wyszło trochę niezręcznie. W tym samym czasie pisałem poniżej kod aby był dostępny dla wszystkich :-)

form1.ShowDialog(); powoduje odświeżenie formy ale za każdym wywołaniem tworzy nową. Jak można temu zapobiec?

1

Chyba usiłujesz zwalić rozwiązanie swojego problemu na nas :>
Kod robi to, co ma robić. Jeśli za każdym razem tworzysz nowy formularz, to za każdym razem tworzy się nowy formularz. Zachowaj sobie referencję do nowo otwartego formularza, a potem zanim utworzysz nowy sprawdź, czy w referencji już coś siedzi i wtedy tego użyj.
Poniżej draft tego, co potrzebujesz zrobić.

private Form1 myGreatForm;

public void CalcOrWhatever()
{
    myGreatForm ?= new Form1();
    myGreatForm.something = somethingElse;
    myGreatForm.Show(); // or ShowDialog()
}
0
porters napisał(a):

Wybacz wyszło trochę niezręcznie. W tym samym czasie pisałem poniżej kod aby był dostępny dla wszystkich :-)

form1.ShowDialog(); powoduje odświeżenie formy ale za każdym wywołaniem tworzy nową. Jak można temu zapobiec?

Jak ?
Nauczyć się podstaw programowania, rozumieć kod, a nie tylko kopiować "na małpę"
Nawet nie rozumiesz zjawiska. Nie odświeżasz formy - tworzysz nową

0

Podziękowania dla @Moderator za pomoc. Rozwiązanie wykonane. Proszę zamknąć temat Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1