Autor Beitrag
c#RS232
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 30.07.09 10:02 
Hy an alle!

Möchte mal in c# in abh. von der Anzahl bestimmter Variablen (bsp. Anzahl Mitarbeiter) textBoxen erstellen und diese dann auf einer winapplikation darstellen, die txtboxen sollen in einer Klasse erstellt werden? (=Ich weiß, dass dies unüblich ist)


gruß


c#
Nemag
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 132
Erhaltene Danke: 2



BeitragVerfasst: Do 30.07.09 10:15 
Wo genau ist denn jetzt dein Problem dabei?

Beim erstellen ansich, bei der später Anzeige?

ich rate jetzt einfach mal und schreibe dir diesen PseudoCode:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
...
List<TextBox> tbList = new List<TextBox>(); 
for(int i = 0; i < DeinVariable; i++)
{
//Hier kannst ja auch Namen,Padding usw setzen.
tbList.Add(new TextBox())
}

...


Und dann die Liste mit Textboxen der List in anderen Gui-Klasse dem Control auf dem sie angezeigt werden zuweisen. (FlowLayoutPanel oder sowas mit schön gesetzten Eigenschaften für Padding usw.)

Oder wo liegt genau dein Problem?
c#RS232 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 30.07.09 10:42 
Hy nemag!

Danke für die schnelle Antwort.


Ich habe es folgendermaßen gemacht (ähnlich wie du):


...
public partial class uebung:Form
{
private ArrayList Txtname;


public uebung()
{
int i;
Txtname=new ArrayList();
for(i=0;i<meine var;i++)
{
Txtname.Add(new TextBox());
(TextBox)Txtname[i].Name="t"+i.ToString();//dies Funktioniert allerdings nicht
}
}
InitializeComponent();--->//muss ich hier im Designer die textboxen anzeigen oder was?
}


Lach mich bitte nicht aus, bin ziemlich am Anfang

gruß und nochmals danke


Zuletzt bearbeitet von c#RS232 am Do 30.07.09 10:45, insgesamt 1-mal bearbeitet
danielf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1012
Erhaltene Danke: 24

Windows XP
C#, Visual Studio
BeitragVerfasst: Do 30.07.09 10:44 
Hallo,

was willst du den Generell machen?

Wenn du Daten einzeigen und editieren willst wäre vlt. ein GridView oder ähnliches praktischer - als das Rad neu erfinden.

Mfg Daniel
c#RS232 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 30.07.09 10:47 
user profile icondanielf hat folgendes geschrieben Zum zitierten Posting springen:
Hallo,

was willst du den Generell machen?

Wenn du Daten einzeigen und editieren willst wäre vlt. ein GridView oder ähnliches praktischer - als das Rad neu erfinden.

Mfg Daniel


Hy Daniel!


Und zwar geht es ganz genau um einen Debugger!

Ich will die Werte in den TxtBoxen anzeigen!
(und da die Userprogrammvariablenanzahl sich ändert), wäre so ne dynamische TxtBoxerstellungsroutine sehr praktisch, nur hab ich im Moment keinen blassen Schimmer wie ich das machen soll.

gruß
Nemag
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 132
Erhaltene Danke: 2



BeitragVerfasst: Do 30.07.09 11:57 
Servus,

keine Angst also lachen wird hier keiner.

(TextBox)Txtname[i].Name also wenn müsste es ((TextBox)TextName[i]).Name = ... heißen.

versuche aber ArrayListen zu vermeiden nimm stattdessen List<T>, T kann dabei ein belibiger Typ sein.

Aber Daniel hat vielleicht recht und eine DataGridView bringt dir vielleicht mehr. (In diesem Zusammenhang kannst du mal nach DataGridView, DataTable, DataSource usw. google bzw. in der MSDN nachschlagen.)

Ansonsten wenn du unbedingt bei deinem Verfahren bleiben willst. Erzeugst du halt eine List mit Instanzen deiner TextBoxen, diese willst du ja dann in einem Control in der GUI anzeigen.
Das heißt, dass das Control auch erst erzeugt werden muss -> dieses wird erst in der InitializeComponent() ausgeführt.

Also musst du deine Textboxen diesem Control hinzufügen.

SO Mittag schreit.
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Do 30.07.09 11:58 
Hallo,

eine zusätzliche Klasse ist überflüssig. Erzeuge die TextBoxen - gerne in einer Schleife - und registriere sie dort, wo sie angezeigt werden sollen: myPanel.Controls.Add oder FlowLayoutPanel oder sonstwie, so wie schon gesagt wurde:
Nemag hat folgendes geschrieben:
Und dann die Liste mit Textboxen der List in anderen Gui-Klasse dem Control auf dem sie angezeigt werden zuweisen.

Wenn du sie wirklich separat registrieren willst, dann benutze einfach eine List<TextBox>, das ist 1000mal einfacher und schöner als eine ArrayList.

Zitat:
(TextBox)Txtname[i].Name="t"+i.ToString();//dies Funktioniert allerdings nicht

"funktioniert nicht" ist keine sinnvolle Problembeschreibung. Fehlermeldung des Compilers oder zur Laufzeit, welche Meldung?

Zitat:
InitializeComponent();--->//muss ich hier im Designer die textboxen anzeigen oder was?

Du musst wohl noch genauer überlegen, was wo wie gemacht wird. Der Designer macht zur Laufzeit gar nichts; er kann keine Textboxen anzeigen, sondern kann nur Code erstellen, mit dem die Anzeige realisiert wird. Schau doch einmal genau an, was die Methode InitializeComponent in der Designer.cs enthält und macht. Du willst es eben nicht über den Designer, sondern durch eigenen Code steuern; das geht so wie in meinem ersten Absatz gesagt.

Übrigens gibt es unter "Bereiche" die ComboBox mit "C#" als Element und den Plus-Button; damit soll Code markiert werden. Das kannst du auch nachträglich erledigen, benutze einfach den Button mit der Schere.

Gruß Jürgen