Laden...

Aus MainForm RichTextBox beschreiben

Erstellt von wbach vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.424 Views
W
wbach Themenstarter:in
20 Beiträge seit 2017
vor 6 Jahren
Aus MainForm RichTextBox beschreiben

Hallo Zusammen,

ich hänge an einem Problem fest.
Ich möchte parallel zur MainForm noch einen Logger mitfüheren und der Logger soll jedesmal aktualisiert werden, wenn ich was ergänze:

namespace TIAPortalController
{
//Main Form
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }
    private void WriteTxtStatus(string Text, Color color)
    {
       ...
       var child = new Logger(this);
       child.CustomValue = passingText;
       child.Logger_Akt();
     }
     private void bu_openLog_Click(object sender, EventArgs e)
     {
       var child = new Logger(this);
       child.CustomValue = passingText;
       child.Show();
       child.Logger_Akt();
    }
  }


//Logger
  public partial class Logger : Form
  {
    public string CustomValue { get; set; }
    private Form1 parentForm;
    public Logger()
    {
      InitializeComponent();
    }
    public Logger(Form1 parent)
    {
      InitializeComponent();
      this.parentForm = parent;
    }
    private void Logger_Load(object sender, EventArgs e)
    {
      txt_Logger.Text = CustomValue;
    }
    public void Logger_Akt()
    {
      txt_Logger.Text = CustomValue;
     }
   }
}

Kann mir jemand sagen, wo ich hierbei den Fehler mache?

LG

2.207 Beiträge seit 2011
vor 6 Jahren

Hallo wbach,

was funktioniert denn nicht? Was ist das Problem? Hilf uns ein bisschen dir zu helfen.

[FAQ] Kommunikation von 2 Forms

Gruss

Coffeebean

W
wbach Themenstarter:in
20 Beiträge seit 2017
vor 6 Jahren

Hallo,

der Logger wird nicht aktualisiert, wenn ich den String passingText beschreibe aus der Methode:

private void WriteTxtStatus(string Text, Color color)
        {
            txt_Status.SelectionStart = txt_Status.TextLength;
            txt_Status.SelectionLength = 0;

            txt_Status.SelectionColor = color;
            txt_Status.AppendText(Text + Environment.NewLine);

            txt_Status.Select(txt_Status.Text.Length, 1);
            txt_Status.ScrollToCaret();
            passingText = txt_Status.Text;

            var child = new Logger(this);
            child.CustomValue = passingText;
            child.Logger_Akt();
        }

Wobei die Methode:

private void bu_openLog_Click(object sender, EventArgs e)
        {
            passingText = txt_Status.Text;
            var child = new Logger(this);
            child.CustomValue = passingText;
            child.Show();
            child.Logger_Akt();
        }

funktioniert.
Gewünschter Effekt. Logger soll parallel den Status im txt_Status anzeigen.

Ich hoffe diese Informationen reichen aus. Sry, bin freizeit Programmierer 😃

LG

2.207 Beiträge seit 2011
vor 6 Jahren

Hallo wbach,

hilft dir:

[FAQ] Kommunikation von 2 Forms

Gruss

Coffeebean

W
wbach Themenstarter:in
20 Beiträge seit 2017
vor 6 Jahren

Ok, danke. Muss mich erstmal da reinarbeiten.

M
2 Beiträge seit 2015
vor 6 Jahren

Vielleicht hilft dir ja folgendes weiter:

  • Erstelle ein neues WinForm Projekt und füg eine weitere Form ("Form2") hinzu.
  • Platziere zwei Buttons auf Form1 und klick beide jeweils doppelt an um die Click_Handler zu erstellen
  • Platziere eine Textbox auf Form2

Code von Form1:


public partial class Form1 : Form
    {
        // Instanz vom Logger in Form1
        Form2 logger;

        public Form1()
        {
            InitializeComponent();
        }

        //Initalisiert die Instanz zu Form 2 und zeigt diese an
        private void button1_Click(object sender, EventArgs e)
        {
            logger = new Form2();
            logger.Show();
        }

        //Setzt den Text "Meldungstext" auf Form2 
        private void button2_Click(object sender, EventArgs e)
        {
            string message = "Meldungstext";
            logger.SetText(message);
        }
    }

Code von Form2:


public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        internal void SetText(string message)
        {
            textBox1.Text = message;
        }
    }

Eigentlich kommt es nur darauf an das Form1 die Instanz von Form2 festhält und Form2 eine Methode bereitstellt um den Text zu setzten.

Dein Fehler ist das du immer eine neue Instanz vom Logger öffnest. new Logger solltest du also nur einmal aufrufen.
Den bereits geloggten Text kannst du ja zusätzlich in einer variablen speichern, Sodass mit Show die alten Einträge angezeigt werden.