Forum: PC-Programmierung Delegate Problem C#


von Unscheinbar (Gast)


Lesenswert?

Hallo Freunde,
habe ein Problem bei dem ich nicht weiter weiß!
Leider sind meine C# Kenntnis sehr bescheiden.

zu meinem Problem
1
private delegate void test(string[] T);
2
        private void aktualisiere(string[] C)
3
        {
4
            for (int i = 0; i > 13; i++)
5
            {
6
                if (this.Controls.Find("textBox" + Convert.ToString(i), false)[0].InvokeRequired)
7
                {
8
                    this.Controls.Find("textBox" + Convert.ToString(i), false)[0].Invoke(new test(aktualisiere), C[i]);
9
                }
10
                else
11
                {
12
                    this.Controls.Find("textBox" + Convert.ToString(i), false)[0].Text = C[i];
13
                }
14
            }
15
        }
Wenn ich aktualisiere aufrufe passiert nichts nicht einmal ein Fehler.
Kann mir jemand erklären warum das so ist?


Gruß
Unscheinbar

PS Danke und schönes Wochenende

von daniel (Gast)


Lesenswert?

Kleiner 13

von Unscheinbar (Gast)


Lesenswert?

Wie dumm ist das denn!!
Entschuldigung für meine Dummheit.
Leider funktioniert es aber immer noch nicht.

Jetzt bekomme ich folgende Fehlermeldung  in dieser Zeile.
1
                 if (this.Controls.Find("textBox" + Convert.ToString(i), false)[0].InvokeRequired)


System.IndexOutOfRangeException wurde nicht behandelt.
  Message=Der Index war außerhalb des Arraybereichs.
  Source=atmega644 Austausch
  StackTrace:
       bei WindowsFormsApplication1.Form1.aktualisiere(String[] C) in 
C:\Users\Peter\documents\visual studio 2010\Projects\atmega644 
Austausch\atmega644 Austausch\Form1.cs:Zeile 234.
       bei WindowsFormsApplication1.Form1.data_extract() in 
C:\Users\Peter\documents\visual studio 2010\Projects\atmega644 
Austausch\atmega644 Austausch\Form1.cs:Zeile 227.
       bei 
WindowsFormsApplication1.Form1.serialPort1_DataReceived(Object sender, 
SerialDataReceivedEventArgs e) in C:\Users\Peter\documents\visual studio 
2010\Projects\atmega644 Austausch\atmega644 Austausch\Form1.cs:Zeile 82.
       bei System.IO.Ports.SerialPort.CatchReceivedEvents(Object src, 
SerialDataReceivedEventArgs e)
       bei 
System.IO.Ports.SerialStream.EventLoopRunner.CallReceiveEvents(Object 
state)
       bei 
System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object 
state)
       bei System.Threading.ExecutionContext.Run(ExecutionContext 
executionContext, ContextCallback callback, Object state, Boolean 
ignoreSyncCtx)
       bei 
System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolW 
orkItem.ExecuteWorkItem()
       bei System.Threading.ThreadPoolWorkQueue.Dispatch()
       bei 
System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()
  InnerException:


Danke für die Hilfe


Unscheinbar

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Unscheinbar schrieb:
> System.IndexOutOfRangeException wurde nicht behandelt

Wie wäre es die Größe des Arrays mal zu prüfen anstatt zu behaupten es 
sei 13 Elemente groß??

von Unscheinbar (Gast)


Lesenswert?

Hallo nochmal,
bin mit meinem Problem einen Schritt weiter.
Wenn ich die groupBox um meine Textboxen entferne dann funktioniert das 
Programm.
Wie kann ich innerhalb der Groupbox  auf meine Textboxen zu greifen ?

Danke und SWE

Unscheinbar

von Peter II (Gast)


Lesenswert?

den Ansatz finde ich schon Merkwürdig. Warum musst du die Textboxen erst 
suchen?

Ich würde die TextBoxen selber in einem Array ablegen, dann kann man 
auch einfach darauf zugreifen.

Oder gleich dynamisch erzeugen.

von Unscheinbar (Gast)


Lesenswert?

Jetzt habe ich das Ganze mit einem Textboxen Array ausprobiert aber 
sobald ich die Textboxen in eine Groupbox packe geht das Programm nicht 
mehr!

Wie kann ich das ändern?

Danke

Unscheinbar

von Peter II (Gast)


Lesenswert?

Unscheinbar schrieb:
> Jetzt habe ich das Ganze mit einem Textboxen Array ausprobiert aber
> sobald ich die Textboxen in eine Groupbox packe geht das Programm nicht
> mehr!

dann zeige doch erstmal wie das du machst.

von Unscheinbar (Gast)


Lesenswert?

So habe ich es mit den Array gelöst
1
private delegate void test(string[] T);
2
        private void aktualisiere(string[] C)
3
        {
4
            List<TextBox> tbList = new List<TextBox>();
5
            tbList.Add(textBox0);
6
            tbList.Add(textBox1);
7
            tbList.Add(textBox2);
8
            tbList.Add(textBox3);
9
            for (int i = 0; i < 4; i++)
10
            {
11
                if (tbList[i].InvokeRequired)
12
                {
13
                    tbList[i].Invoke(new test(aktualisiere), C[i]);
14
                }
15
                else
16
                {
17
                    tbList[i].Text = C[i];
18
                }
19
               
20
               
21
            }
22
Unscheinbar
23
        }

von Peter II (Gast)


Lesenswert?

so und nun noch die fehlermeldung die du bekommst? Mit geht nicht kann 
man nicht viel anfangen.

von Peter II (Gast)


Lesenswert?

hier stimme doch etwas nicht:

private delegate void test(string[] T);


damit braucht ja test ein array, aber du übergibst einen string:

tbList[i].Invoke(new test(aktualisiere), C[i]);

von Unscheinbar (Gast)


Angehängte Dateien:

Lesenswert?

Hier habe ich mal einen Bild
von der Fehlermeldung!

Danke für Deine Geduld

Gruß

Unscheinbar

von Unscheinbar (Gast)


Angehängte Dateien:

Lesenswert?

Hier  das Bild mit Änderung

Gruß


Unscheinbar

von Peter II (Gast)


Lesenswert?

genau das Problem was ich beschrieben habe.

von Unscheinbar (Gast)


Lesenswert?

Ja aber kannst Du mir Bitte Helfen es zu lösen ?

Danke und Gruß
Unscheinbar

von Peter II (Gast)


Lesenswert?

nur ein versucht:
1
private delegate void test(TextBox tb, String s);
2
3
private void aktualisiere2(TextBox tb, String s) {
4
      
5
      if (tb.InvokeRequired) {
6
         tb.Invoke(new test(aktualisiere2), tb, s );
7
      } else {
8
         tb.Text = s;
9
      }
10
}
11
12
private void aktualisiere(string[] C) {
13
   List<TextBox> tbList = new List<TextBox>();
14
   tbList.Add(textBox0);
15
   tbList.Add(textBox1);
16
   tbList.Add(textBox2);
17
   tbList.Add(textBox3);
18
      
19
   for (int i = 0; i < 4; i++) {
20
      aktualisiere2( tbList[i], C[i] );
21
   }
22
}

von Unscheinbar (Gast)


Lesenswert?

Perfekt jetzt geht das ganze.
Besten Dank

Gruß

Unscheinbar

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.