Laden...

ausnahmebehandlung

Erstellt von Khemisset vor 17 Jahren Letzter Beitrag vor 17 Jahren 7.452 Views
K
Khemisset Themenstarter:in
26 Beiträge seit 2006
vor 17 Jahren
ausnahmebehandlung

ich habe so eine arraylist und will dass textboxe aus dieser ArrayListe gefüllt weden.
ok und zwar mein problem liegt jetzt daran dass:
wenn das inhalt der Arraylist kleiner als der anzahl der textboxe tritt ein fehler ein.
weiss vielleich jemand wie man das problem lösen kann

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Khemisset,

ja, so programmieren, dass der Fehler nicht auftritt. Das sollte nicht wirklich schwer sein. Solltest du selbst hinbekommen. Wenn nicht und nur dann, brauchen wir wohl etwas Code.

herbivore

K
Khemisset Themenstarter:in
26 Beiträge seit 2006
vor 17 Jahren

ich habe jetzt seit 4 stunden versucht das problem hinzukriegen aber leider könnte ich es nicht deswegen versuche ich paar tips von euch zu bekommen


public void ShowNamesList( ArrayList NameList)
{

try
{
if(NameList.Count==0)
{
MessageBox.Show("the List is empty");
}
else
{
tBAssistent.Text=NameList[0].ToString();
tBAssistent.ReadOnly = true; 
tBAssistent.BackColor=Color.White;
tBPatient1.Text=NameList[1].ToString();
tBPatient1.ReadOnly=true;
tBPatient1.BackColor=Color.White;
tBPatient2.Text=NameList[2].ToString();
tBPatient2.ReadOnly=true;
tBPatient2.BackColor=Color.White;
tBPatient3.Text=NameList[3].ToString();
tBPatient3.ReadOnly=true;
tBPatient3.BackColor=Color.White;
tBPatient4.Text=NameList[4].ToString();
tBPatient4.ReadOnly=true;
tBPatient4.BackColor=Color.White;
}
catch(Exception)
{
MessageBox.Show("ein fehler ist aufgetreten");
}
}

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Khemisset,

verwende ein TextBox-Array und eine Schleife, die nur bis zum Minimum von NameList.Length-1 und atb.Length-1 läuft, wobei atb die dass TextBox-Array ist.

herbivore

K
35 Beiträge seit 2005
vor 17 Jahren

Hallo Khemisset,

du prüfst, ob deine Collection \ Array leer ist. Sehr richtig! Dann greifst du auf das 0te (das erste Element) der Auflistung zu. Klar das funktioniert, du hast ja vorher sicher gestellt, dass die Auflistung nicht leer ist (min. ein Element vorhanden).

Dann greifst du auf das 2te Element zu (NameList[1]) du hast aber nie geprüft ob es das Element überhaupt gibt. Oder ob deine Auflistung überhaupt die länge 2 erreicht.

Du musst also sicher stellen. Das alle Felder die du aus deiner Auflistung abfragen möchtest auch existieren.


private const int COUNT_TEXTBOXES = 5; // Anzahl Textboxen auf deiner From

if(NameList.Count < COUNT_TEXTBOXES) 
  throw new ArgumentOutOfRangeException("Die anzahl der Elemente in der Auflistung ist kleiner als die anzahl der Textboxen die gefüllt werden sollen.");


Leben bedeutet lernen, leben bedeutet Veränderung... :]

K
Khemisset Themenstarter:in
26 Beiträge seit 2006
vor 17 Jahren

darf man das code so gestalten

catch(Exception){}

wenn es so schreibe dann funktioniert es ohne fehler
geht das oder nicht.

K
35 Beiträge seit 2005
vor 17 Jahren

Hallo Khemisset,

also das würde ich nicht machen. Dein Code generiert einen Fehler! Was du bist also dafür verantwortlich!
Du kümmerst dich sogar anfänglich schon um den Fehler in dem du ihn abfängst mit catch. Und dann lässt du ihn links liegen???

Richtig ist das auf garkeinen Fall.

gruß klimm

Leben bedeutet lernen, leben bedeutet Veränderung... :]

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Khemisset,

inhalt der Arraylist kleiner als der anzahl der textboxe

ist es denn erlaubt, dass die ArrayList kleiner ist, als die Anzahl der TextBoxen? Wenn ja, dann ist try/catch zu verwenden der falsche Weg und auch der Vorschlag mit dem throw passt dann nicht. Du solltest es dann so machen, wie ich gesagt habe. Wenn es nicht erlaubt ist, dann ist try/catch an dieser Stelle der falsche Weg, sondern dann solltest du den Vorschlag mit dem throw verwenden und die Exception auf höherer Ebene abfagen.

herbivore

6.862 Beiträge seit 2003
vor 17 Jahren

Kannst du schreiben, aber dann nutzt dir das Exception Objekt wenig weil du nicht drauf zugreifen kannst.

Schreib lieber sowas wie (Exception ex), dann kannst du über die Variable ex auf die Exception zugreifen und bekommst nen paar nützliche Angaben.

Baka wa shinanakya naoranai.

Mein XING Profil.

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo talla,

catch sollten aber **nicht **dazu verwendet werden, Programmierfehler, die man kennt, abzufangen. Sondern solche Programmierfehler sollten durch Änderung des Codes behoben werden. Und es ist ein Programmierfehler auf statisch auf Array-Indizes zuzugreifen, ohne dass geprüft oder sichergestellt ist, dass sie existieren.

herbivore

6.862 Beiträge seit 2003
vor 17 Jahren

Darüber sagt meine Antwort doch gar nichts aus 🙂 Es ging nur um die Angabe der Exception Variablen, weil man sonst Informationen verlieren würde.

Das der statische Arrayzugriff falsch ist, ist doch ne ganz andere Sache und die habt ihr mit der Schleife als Lösung doch schon verbessert.

Baka wa shinanakya naoranai.

Mein XING Profil.

564 Beiträge seit 2006
vor 17 Jahren

Hi Khemisset!

Wie die anderen schon sagen, ist das ausbügeln von selbst verantworteten Programmierfehlern ein ganz schlechter Stil 😉
Mit der count-Eigenschaft der ArrayList bekommst du zurück, wieviele Elemente sie hat. Bei n Elementen kannst du also bis zum (n-1). Element zugreifen. n-1 deshalb, weil das erste Element den Index 0 besitzt und so weiter und so fort. 😉

der Marcel

EDIT: Das wurde schon gesagt, habe ich übersehen 😁

:] 😄Der größte Fehler eines modernen Computers sitzt meist davor 😁 :]

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo talla,

ok, dann braucht man aber auch keine Exception mehr zu fangen 🙂

Ich wollte das auch nur noch mal klarstellen. Mehr für Khemisset als für dich.

herbivore

K
Khemisset Themenstarter:in
26 Beiträge seit 2006
vor 17 Jahren

verwende ein TextBox-Array und eine Schleife, die nur bis zum Minimum von NameList.Length-1 und atb.Length-1 läuft, wobei atb die dass TextBox-Array ist.

herbivore

kannst du mir bitte in einem klenen code zeigen was du damit meinst

6.862 Beiträge seit 2003
vor 17 Jahren

@Herbivore

Du weißt was passiert wenn man Fehler erst bei "Bedarf" abfängt und behandelt 😁
Dann kommt jemand mit Pfaden die länger als 256 Zeichen sind oder angeblich nicht vorhanden sind obwohl sie doch da sind gg

Baka wa shinanakya naoranai.

Mein XING Profil.

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo talla,

ok, das ist jetzt ein Insider. Aber trotzdem. Der Fehler wurde ja korrekt abgefangen und ausgegeben. Dass es ein Fehler war, denn man auch ignorieren konnte, war vorher nicht klar.

Hallo Khemisset,

Arrays und Schleifen gehören zu den absoluten Grundlagen der Programmierung. Diese zu vermitteln kann ein Forum nicht leisten. Ich möchte dich daher darauf verweisen ein C#-Buch zu verwenden.

herbivore

K
Khemisset Themenstarter:in
26 Beiträge seit 2006
vor 17 Jahren

das problem hier ist die textboxe haben verschiedene namen deswegen will ich ein kleines code sehen wie man das erledigen kann
ein c# buch habe ich ja schon gekauft
aber es helft mir nicht weiter deswegen suche ich helfe in diesem forum

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Khemisset,

das Problem mit den verschiedenen Namen erledigt sich ja gerade durch die Verwendung eines Arrays. Natürlich musst du die TextBoxen auch an das Array zuweisen.

herbivore

K
Khemisset Themenstarter:in
26 Beiträge seit 2006
vor 17 Jahren

kannst du mir bitte das ich 2 zeilen code zeigen

564 Beiträge seit 2006
vor 17 Jahren

Hi Khemisset!

Das sind wirklich die Grundlagen zu Arrays. Deine Fragen können mit hoher Wahrscheinlichkeit schon durch das lesen vom guide to C# aus dem Weg geräumt werden. Beherzige bitte herbivores Vorschlag ein Buch über C# zu lesen. Auf die Schnelle kommst du heute auch mit dem guide klar.

der Marcel

EDIT: Bei herbivores letzter Antwort gibts es nichts an Code zu zeigen. Versuche doch bitte ersteinmal Arrays zu verstehen. Wenn du das hast, wird dir ein kleine (manchmal nachteilige) Eigenschaft aufallen, welche die ArrayList (besser List<T> in Net2.0) löst.

:] 😄Der größte Fehler eines modernen Computers sitzt meist davor 😁 :]

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Khemisset,

eine der Hauptaufgaben eines (Hobby-)Programmierers ist es, eine Idee oder Beschreibung in Code unzusetzen. Daher ist es keine keine Schikane, wenn wir keinen Code zeigen. Die Beschreibung ist da, jetzt ist es deine Aufgabe (und nicht die des Forums) sie in Code umzusetzen. Die Beschreibung ist auch nicht sonderlich komplex. Wir reden hier über einfache Zuweisungen. Das gehört zu den absoluten Grundlagen. Deshalb nochmal der Verweis auf ein C#-Buch.

herbivore

K
Khemisset Themenstarter:in
26 Beiträge seit 2006
vor 17 Jahren

ArrayList TBX = new ArrayList[]{tBTextbox,tBTextbox1,tBTextbox2,tBTextbox3};
for(int i=0;i<=NameList.Count+1;i++)
{
TBX[i].Text=NameList[i].ToString();
TBX[i].ReadOnly=true;
TBX[i].BackColor=Color.White;

ich habe es so versucht aber es haut nicht hin
kann mir jemand erklären wieso

6.862 Beiträge seit 2003
vor 17 Jahren

Einmal reicht 🙂 Und die Fehlermeldung sagt dir auch ganz sicher genau wieso und an welcher Stelle. Und die Hilfe dazu bietet sogar schon fertige Lösungsvorschläge...

In deinem Fall stimmt einfach der Typ nicht. Schau dir an was du zurückbekommst wenn du auf eine Arraylist zugreifst, und was du aber haben willst.

Baka wa shinanakya naoranai.

Mein XING Profil.

K
Khemisset Themenstarter:in
26 Beiträge seit 2006
vor 17 Jahren

das ist sehr komliziert mein freund weil ich da nur ein formular verwende und die namen einzugeben und wieder den selben formuler mit namen füllen.
und hier ist das problem .
da kann ich nicht die namen der textboxe nicht ändern,sonst ist das problem für mich schon gestern gelöst

Q
992 Beiträge seit 2005
vor 17 Jahren

Schau dir mal das foreach Statement an, das sollte es einfacher machen.

Damit solltest du dann über NameList iterieren. Des weiteren musst du sicher sein, dass NameList nicht mehr als 4 Elemente hat.

Grüße, Christoph

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Quallo,

foreach ist nicht so passend, weil ja hier zwei Collections synchron durchgegangen werden sollen.

herbivore