Hi,
da hatte ich dich dan wohl falsch verstanden. Wo holt sich das Programm denn die Liste der möglichen Sprachen her? Und wovon ist es abhängig, welche Sprachen nun in der Liste angezeigt werden sollen?
Dr. Z
Vllt kannst du die Systemvariablen auslesen und dir die dort gefundene Sprache anzeigen lassen.
Eine Systemvariable heißt "LANG" und da steht das Länderkürzel hinter. Diese Sprache sollte der User doch beherschen und diese könntest du dann in deinem Programm nutzen?!
Viele Grüße
Dr.Z
Hi,
ich habs mal versucht zu programmieren, das ist bei rausgekommen. Ist nicht besonders originell, aber ich finde, dass es funktioniert. vllt meintest du was völlig anderes und wir haben eigentlich komplett aneinander vorbei geredet.
Hier mal meine Lösung zum Sortieren von nem zweidimensionalen Array:
string[,] Liste = new string[,] { { "c", "3", "cx" }, { "b", "2", "by" }, {"a", "1", "az"} };
string[] Sortieren = new string[3];
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
Sortieren[j] = Liste[j, i];
}
Array.Sort(Sortieren);
for (int k = 0; k < 3; k++)
{
Liste[k, i] = Sortieren[k];
}
}
Vorher sieht das Array so aus:
c; 3; cx;
b; 2; by;
a; 1; az;
Nachher dann so:
a; 1; az;
b; 2; by;
c; 3; cx
Bei deiner nächsten Frage kann ich dir leider nicht helfenn, hab da leider total keine Ahnung von
Vllt nicht die Beste Idee,
aber wie wäre es, wenn du jede Spalte des Ausgangs-Arrays in ein eigenens Sortier-Array mit nur einer Spalte kopierst, dieses dann sortiertst und schließlich wieder in die entsprechende Spalte deines Ausgangs-Arrays schreibst?
Dr. Z
Color.FromArgb(IntegerWert);
Dr. Z
Hallo nochmal
Danke für eure hilfreichen und sehr guten Antworten 🙂
Damit hat sich meine Frage auch schon erledigt und ich hab wieder was gelernt.
Danke nochmals
Dr.Z
Hallo zusammen,
ich hab die Forumssuche benutzt, hab aber nicht das gefunden, was ich gesucht habe, weil ich auch nicht genau wusste, nach welchem Suchbegriff ich zu suchen habe.
Also für den Fall, dass es schon so ein Thema gibt, einfach eben drauf verweisen.
Also, wenn man mit Standard .net Klassen Arbeitet und man sich durch einen .(Punkt) nach dem Klassennamen die Eigenschaften / Methoden anzeigen lässt, enthält man immer kurze Informationen über die Eigenschaft oder Methode:
Bei Eigenschaften: Typ und Name + eine kurze Beschreibung der Funktion
Bei Methoden: Rückgabetyp, Name und in Klammern die erwarteten Übergabewerte + eine kurze Beschreibung der Funktion.
Erstellt man eigene Klassen so werden auch Typ und Name bei Eigenschaften bzw. Rückgabetyp, Name und die zu erwartenden Übergabewerte angezeigt. Jedoch ist kein kurzer Informationstext vorhanden.
siehe Anhang
Meine Frage ist nun, ob es möglich ist dieses Informationstext zusätzlich zu den "Standardinformationen" zu integrieren und wenn ja, wie?
Danke schonmal für eure Hilfe
Dr.Z
Hallo zusammen,
habe mal wieder ein Problem zu dem ich noch keine Lösung gefunden habe.
Ich habe ein paar TabPages mit checkboxen. Nun möchte ich überprüfen, welche Kombination von Checkboxen beim verlassen derTabPage aktiviert ist. Ist eine falsche checkbox aktiviert, soll diese TabPage nicht verlassen werden. Leider funktioniert das nicht so, weil sobald ich auf eine andere TabPage klicke, wird zwar die Prüfung bei LeaveTabPage durchlaufen, nur kann weiß ich nicht zu verhindern, dass die vorher ausgewählte TabPAge aktiviert wird.
Habt ihr da eine Idee, wie ich das realisieren könnte?
Vielen Dank für eure Hilfe
Dr.Z
lol 🙂
Da könnte man ja auch irgendwie alleine drauf kommen.
Danke dir trotzdem 🙂
Dr. Z
Hallo, habe jetzt auch dieses Problem.
Habe in meiner Klasse eine private Variable
private int wert;
, die ich mittels
public int pwert
{
set { wert= value; }
get { return pwert; }
}
setzen, bzw. zurückgeben möchte. Nur bekomm ich auch die "Endlosschleife". Aber wie kann ich das Problem denn dann umgehen?Würde mich über eure Hilfe freuen.
Dr. Z
Hallo Jürgen.
Genau das war der nötige Tipp.
Jetzt wo ich das DockStyle auf Fill gesetzt habe, klappt es.
Danke euch für eure Hilfe 🙂
Ihr seit echt Spitze 👍
Dr. Z
Hallo Jürgen,
danke für deine Antwort. So wie du das darstelltst, mache ich es auch. Bzw. hatte es vor, dies so zu machen.
Das Panel habe ich soweit erstellt. Einfach die entsprechenden Steuereleente im Oberflächengestalter zusammengepackt.
Das ganze heißt dann panel1.
Nun versuche ich beim aktivieren einer TabPage das Panel dementsprechend anzeigen zu lassen:
private void tabPage2_Enter(object sender, EventArgs e)
{
tabControl1.SelectedTab = tabPage2;
tabControl1.SelectedTab.Controls.Add(panel1);
}
Beim Verlassen des Tabs, ist auch klar, entnehme ich dem Tab das Panel wieder:
private void tabPage2_Leave(object sender, EventArgs e)
{
tabControl1.SelectedTab.Controls.Remove(panel1);
}
Nur seh ich dann auf dem entsprechenden Tabs nichts.
Habe auch wie herbivore in seiner Antwort panel1.Parent = tabControl1.SelectedPage gesetzt.
Aber auch das funktioniert nicht 🙂
hi,
hoffe ich kann dir Helfen.
Schreibe dir doch eine eigene Funktion, die aus dem String ein Char-Array macht. Anschließend durchläufst du das CharArray so lange, wie du kein " findest. Findest du ein " speicherst du alle Zeichen des CharArray meinetwegen in ein string-Array. Aschließend schneidest du alle Zeichen inklusvie dem gefunden " ab und beginnst die Suche vom neuen.
Denke so oder so ähnlich sollte es funktionieren, oder hab ich was falsch verstanden?
Dr.Z
Ok, ich gucks mir an. 🙂
aber ich find die Sache mit den Tabs gut 🙂
Edit:
Alles klar, hab mir mal das Video dazu angeguckt.
Also, hast du ne Idee, wie ich das realisieren könnte? 😉
Vllt, aber wirklich nur vllt, komme ich auf die Sache mit der DB wieder zu sprechen, wenn ich mein jetziges Ziel erreicht habe und es mal wieder daran geht, das Programm zu verändern und es sich bietet, den ganzen alten Kram mal übern haufen zu werfen 🙂
Sche... auf Termine und fristen 😉
Ich als Azubi (und dann auch noch für Systemintegration 😄) hab alle Freiheiten der Welt 🙂
Wohin ich drifte, weiß ich selber noch nicht so ganz 🙂
Ich müsste jetzt erst mal die Sache mit einem Panel und den 17 TabgPages auf die Reihe bekommen. Habt ihr da noch nen Hinweis, wie ich das Panel auf dam entsprechenden Tab sichtbar mache? Die eingeistellten Daten im Programm zu behalten sollte dann nicht das Problem sein. Auch später das Speichern nicht.
Wäre dankbar für ne Hilfe in die Richtung 🙂
Dr.Z
Das hört sich alles sehr interessant an 🙂
Muss jetzt erstmal die Sache mit der Oberfläche hinbekommen und dem Druchschalten der einzelnen TabPages, dem damit verbundenen Anzeigen des Panels (hab och noch nicht ganz so raus) und dem Speichern der Werte in meiner Instanz der Klasse. (das sollte nicht das Problem sein 🙂
Danach gehts dann erstmal ans Speichern 🙂 aber für weitere Anregungen, Anmerkungen und Vorschläge bin ich offen.
Dr. Z
Edit: HAt noch jemand nen Tipp, wie ich das Panel mit den Steuerelemeten immer auf dem entsprechenden (ausgewählten) Tab sichtbar mache?
Irgendwie will das nicht so ganz klappen 🙂
Hi,
ich habe eine Konfigurationsoberfläche für ein Programm. Darin befindet sich ein TabControl mit 17 TabPages. AUf jeder TabPage befinden sich immer wieder die gleichen Einstellungsmöglichkeiten.
Deshalb 17 * 20 🙂
Dass das Unmengen an Steuerelementen sind, ist mir auch schon aufgefallen. Daher wollte ich das ganze auf nur eine Steuerelementgruppe mit 20 Steuerelementen reduzieren.
Aber danke für deinen Hinweis, der hat mich auf eine Idee gebracht. Die Einstellungen müssen auch nach dem Schließen des Programms gespeichert werden. Bisher mache ich das in eine XML-Datei. Ist auch irgendwie nicht so das Gelbe vom ein.
Nun kommt deine Idee ins Spiel. Wie siehts aus mit ner kleinen Datenbank? bzw nur eine Tabelle 🙂 Hier kann ich doch alle Änderungen reinspeichern. Auch nach dem schließen meines Programms hab ich alles schön sortiert und fein an seinem Platz.
Zusätzlich könnte ich ja noch weitere Informationen zur entsprechenden TabPage speichern.
Also, da muss ich mich dann auch nochmal mit auseinader setzen.
Vielenk Dank für Deine Idee 🙂
Wie das im einzelnen mit der Einzelblatt-Ansicht und dem Databinding funktioniert, weiß ich noch nicht, werde micha ber mal drum kümmern
Danke nochmal für den Tipp 👍
Dr. Z
Das dauert doch wirklich nicht schlange das zu programmieren, oder?
Anstatt den Beitrag hätte man auch eben die 5 Zeilen programmieren können 🙂
Um aber auf deine Frage zu sprechen zu kommen:
Ich wüsste nicht, dass es sowas gibt 🙂
Ich glaub ich hab verstanden wie ihr das meint 🙂
1 Klasse
20 Properties
17 mal diese Klasse instanzieren
Jede Instanz gehört zu einem TabControl (insgesamt 17) und nimmt die Werte davon entgegen
1 Panel mit 20 Steuerelementen, das immer nur auf dem aktuell geöffneten Tabcontrol angezeigt wird.
So, das werde ich mir nun realiseren. Vielen Dank für eure Hilfe, wenn ihr noch Anmerkungen, Verbesserungsvorschläge oder sonstiges habt, immer her damit, kann nicht schaden.
Echt Klasse eure Hilfe 👍 und nochmal vielen Dank
Dr. Z
Dann hätte ich doch eine Klasse mit allen 17 * 20 Steuerelementen als jeweilige Eigenschaft oder ich mach mir 17 Klassen, die alle den gleichen Inhalt haben und instanziere diese 20 mal.
aus meiner Sicht ist da ein Array mit 17 * 20 Elementen auf den ersten Anblick angenehmer.
Aber vllt hast du recht. Wenn ich mal viele viele Schritte weiter denke, könnte sich "die Mehrarbeit" evtl später lohnen.
Nur nehme ich dann eine Klasse oder lieber 20?
Hallo und vielen Dank für die Antworten.
Die haben mir sehr geholfen und habe wieder ne Menge gelernt, aber auch mal wieder den Wald vor lauter Bäumen nicht gesehen 🙂
So wie ich es mir jetzt denke ist die Methode von herbivore die einfachste / leichteste / schnellste. Ich zeige immer nur im ausgewählten Tabstop das Panel an und schreibe die Werte meiner Steuerelemente beim verlassen dieses TabStopps in mein Werte-Array zur weiteren Verarbeitung.
Vielen Dank nochmal für eure Hilfe. 👍
Viele Grüße
Dr. Z
Hallo zusammen,
Habe eine Oberlfläche mit einem TabControl. Das TabControl enthält 17 TabPages. Auf jeder Seite kommen immer wieder die gleichen 20 Steuerelemente vor. Das alles über den Desinger zu erstellen und so ist zwar geglückt, aber jetzt beim erstellen einer neuen Version des Programms habe ich ich mir gedacht, dass das auch anders machbar sein muss.
Also: Steuerelemente dynamisch erzeugen. Klappt Prima. Wieder habe ich das Progrblem, dass ich dann 17 * 20 Steuerelemente programmieren müsste. Ist auch irgendwie nicht so das Gelbe vom Ei.
Also habe ich mal weitergedacht und bin auf die Idee gekommen, mir ein Control-Array zu erstellen, in dem ich alle Steuerlemente (also nur einmal 20 Stück) generiere und speicher.
Bei jedem Aufruf einer TabPage des TabControls adde ich mittels einer For-Schleife und this.TabPageXYZ.Control.Add(Steuerelement) die Steuerelemente in die Form und mache diese somit sichtbar.
Auch das klappt.
Ändere ich nun die Werte der Steuerlemente, z.b. eine Checkbox wird markiert, ein Text wird geändert usw. möchte ich diese Werte beim verlassen der TabPage in ein zweites Array speichern.
Ich habe mir gedacht, ich kann so vorgehen:
Control[] Steuerelemente = new Control[3];
string[,] WerteVonSte = new string[2, 3];
private void Form1_Load(object sender, EventArgs e)
{
Button btn1 = new Button();
btn1.Left = 25;
btn1.Top = 25;
Steuerelemente[0] = btn1;
CheckBox chb = new CheckBox();
chb.Left = 25;
chb.Top = btn1.Top + btn1.Height + 25;
chb.Text = "Markier mich";
Steuerelemente[1] = chb;
NumericUpDown nud = new NumericUpDown();
nud.Left = 25;
nud.Top = chb.Top + chb.Height + 25;
nud.Value = 100;
Steuerelemente[2] = nud;
}
Das funktioniert bestens.
Zum Speichern der Werte wollte ich dann folgendes machen:
private void tabPage2_Leave(object sender, EventArgs e)
{
WerteVonSte[1, 0] = Steuerelemente[0].Name;
WerteVonSte[1, 1] = Steuerelemente[1].Checked;
WerteVonSte[1, 2] = Steuerelemente[2].Value;
}
Leider geht das nicht, denn über Steuerlemente[index].Eigenschaft bekomme ich nicht alle Eigenschaften die die von mir zugewiesenen Steuerelemente besitzen. So kann ich über Steuerelemente[1] z.B nicht die Eigenschaft .Checked der Checkbox, die an dieser Position liegt, abrufen.
Habt ihr da ne Idee, wie ich da weiter kommen, bzw. wo das Problem/Fehler/Grund/Ursache liegt?
Vielen Dank für eure Hilfe.
Dr. Z
Danke für deine Antwort, diese war sehr hilfreich und verständlich. 👍
Mal gucken wie ich mein Problem nun lösen werde, habe ja jetzt mehrere Methode, wie man es machen kann.
Danke dir nochmals.
Eine allgemeine Frage zum verlinkten Artikel hätte ich noch:
Es kommt eine Zeile wie folgt im Quellcode vor:
RoBitmap robmp = new RoBitmap();
Ich finde die Klasse RoBitmap nirgends. Finde nur die Standard "Bitmap".
Kann mir da noch jemand weiter helfen?
Danke euch.
Dr. Z
Danke für den sehr interessanten Link. Damit kann ich auf jedenfall was anfangen und werde es auch versuchen umszusetzen. 👍
Jedoch sind meine Fragen noch nicht damit beantwortet, so richtig 🙂
...warum entsteht ein so ein großer Zeitunterschied beim Suchen von bestimmten Punkten zum einen in einem Array und zum anderen in einem Image. Letztendlich sind die Pixel der Bitmap doch auch nichts anderes als ein zwei dimensionales Array?
Vielen Dank
Z
Hallo zusammen,
ich beschäftige mich momentan mit dem Zeichnen in c#. Ich will nichts aufwendiges machen, sondern nur verschiedene Zahlen und Buchstaben malen und bestimmte Punkte zu lokaliseren (höchster gemalter Punkt, tiefster gemalter Punkt usw...).
Jetzt gibt es ja zwei Möglichkeiten zu Zeichen:
Ich wusste nicht, wie ich in der Form an die bemalten Pixel heran kommen sollte. Also habe ich zusätzlich ein zweidimensionales bool Array erstellt, welches die Maße der Form hat und jedes Element, in das auf der oberfläche Zeichne, auf true gesetzt. Um nun nachher die oben genannten Punkte zu lokalisieren, durchsuche ich einfach nur das Array nach bestimmten Kriterien. Das klappt auch ganz gut und geht sehr schnell.
Um in der PicureBox, bzw. dem Image der PictureBox an die Pixel zu gelangen, die ich "bemalt" habe, gehe ich wie folgt vor:
for (int y = 0; y <= bmp.Height - 1; y++)
{
for (int x = bmp.Width; x >= 0; x--)
{
col_pixel = bmp.GetPixel(x, y);
if (col_pixel.Name != "0")
{
pnt_oben.X = x;
pnt_oben.Y = y;
bol_pixelfound = true;
break;
}
}
if (bol_pixelfound == true)
{
break;
}
}
bmp ist das Image der PictureBox und eine Instanz der Klasse Bitmap.
Ich frage halt jedes Pixel ab, ob es schwarz ist oder nicht. Da gibts bestimmt noch ne bessere Lösungsmöglichkeit, habe aber erstmal keine gefunden, so als Laie.
Auch mit dieser Methode lassen sich meine Punkte (höchster gemalter Punkt, tiefster gemalter Punkt usw...) finden. Nur dauert das sehr sehr lange.
Ansich ist das kein Problem, ich finde das Zeichnen in eine PictureBox aber besser, da ich meiner Meinung nach mehre Optionen in der weiteren Verarbeitung des Bildes habe.
Meine Frage lautet eigentlich nur (und dafür so viel Text 🙂 ) warum entsteht ein so ein großer Zeitunterschied beim Suchen von bestimmten Punkten zum einen in einem Array und zum anderen in einem Image. Letztendlich sind die Pixel der Bitmap doch auch nichts anderes als ein zwei dimensionales Array?
Würde mich sehr über eure Antworten freuen
Hallo,
danke für deine schnelle Antwort und Hilfe 🙂
Das klappt wie gewollt 🙂 und die auch die Sache mit dem Tag ist gut, mache das ganze nämlich über eine Schleife. Aber der Name tut's ja auch, oder nicht?#
Also nochmals vielen vielen Dank 🙂
Dr. Z 👍
Hallo zusammen,
ich habe ein gefülltes PictureBox-Array. Jeder PictureBox in diesem Array habe ich den gleichen EventHandler beim Click-Ereginis hinzugefügt. Klicke ich nun auf irgend eine meienr PB's in meiner Oberfläche, so wird die entsprechend angegebene Funktion durchlaufen. Mein Problem ist nun, dass ich nicht weiß, welche PictureBox die Funktion aufruft. Über object sender und EventArgs e bekomme ich auch keine mir nützlichen Informationen, oder sehe ich das falsch? Es soll je nach PB was anderes verarbeitet werden, dazu bräuchte ich halt diese Unterscheidungsmöglichkeit, wenn es diese gibt.
Hintergrund der ganzen Geschichte ist, dass ich mir keine 36 PB_Click-Ereginisse im Programmcode erstellen will, sondern dieses mittels nur eines PB_Click-Ereignisses realisieren will.
Weiß jemand von euch Rat, oder hat eine Idee? Würde ja die Forumsssuche nutzen, aber die geht ja leider nicht 🙂
Freundliche Grüße
Dr. Z
Hallo herbivore.
Das was du erklärt hast, ist soweit klar, kann und kenn ich auch. Mir war nur nicht klar, dass die Variable einer "globalen" Deklaration Membervariable genannt wird.
Ich kenne auch den unterschied und weiß auch dem entsprechend die Variablen anzuwenden.
Trotzdem schaffe ich es nicht, meinen Thread entsprechend zu initialiseren.
Kein Mensch weiß warum.
🙂
Das finde ich im Internet dazu:
Term: Member variable
Definition: Typed memory locations for storing values. Also known as a field or a local variable.
See also:
This C# Online.NET definition is from the Glossary of .NET / C# Terms.
Das Buch kenn und nutze ich. Habe mich auch den Teil über Threads durch gelesen.
gucke nocvhmal da rein und hoffe etwas zu finden.
vielen Danke für deine hilfe.
mache ich das nicht?
public Form1()
{
InitializeComponent();
Thread thr_voncomlesen = new Thread(new ThreadStart(voncomlesen));
}
?????
Ich verstehs nicht 🙂
Original von Programmierhans
this statt WindowsApplication1.Form1
und an welcher Stelle?
Danke für deine Antwort. Den FAQ-Artikel hab ich selbstverständlich genutzt.
Leider funktioniert dies auch nicht wirklich, vllt mache ich ja was falsch.
so siehts bei mir aus:
public Form1()
{
InitializeComponent();
ThreadStart tst_auslagern = new ThreadStart(voncomlesen);
}
#region Deklaration von Variablen & Instanzierung von Klassen
ChangeAndSaveConfig obj_casc = new ChangeAndSaveConfig();
FolderBrowserDialog obj_fbdquelle = new FolderBrowserDialog();
FolderBrowserDialog obj_fbdziel = new FolderBrowserDialog();
Thread thr_voncomlesen = new Thread(tst_auslagern);
.
.
.
Als Resultat der oben aufgeführten Möglichkeit erhalte ich dann die Meldung, dass tst_auslagern an der entsprechenden Stelle nicht bekannt ist.
Folgende Methode habe ich auch Probiert:
public Form1()
{
InitializeComponent();
Thread thr_voncomlesen = new Thread(new ThreadStart(voncomlesen);
}
#region Deklaration von Variablen & Instanzierung von Klassen
ChangeAndSaveConfig obj_casc = new ChangeAndSaveConfig();
FolderBrowserDialog obj_fbdquelle = new FolderBrowserDialog();
FolderBrowserDialog obj_fbdziel = new FolderBrowserDialog();
.
.
.
Das Funktioniert auch nicht. Habe wieder den gleichen Fehler wie im ersten Beitrag.
Vielen Dank für eure Hlfe, auch wenn ich mich vllt ein wenig dumm anstelle, aber ich bin noch ein Anfänger.
Dr. Z
Hallo zusammen,
ich habe erneut ein Problem.
Ich möchte einen bestimmten Programmteil in einen Thread auslagern, damit dieser Unabhängig vom restlichen Programm läuft.
Ich weiß ja nicht wie ihr es macht, aber um einen eigenen Thread zu erstellen gehe ich wie folgt vor:
Thread thread_name = new Thread(new Threadstart(funktion/methode ide ausgelagert werden soll)
so weit so gut.
Versuche ich diese Initialiserung in der Form1 Klasse zu erzeugen, bekomme ich immer eine Fehlermeldung:
"Ein Feldinitialisierer kann nicht auf das nicht statische Feld bzw. die nicht statische Methode oder Eigenschaft "WindowsApplication1.Form1.voncomlesen()" verweisen...."
Versuche ich oben geschriebenes in Form1_Load zu integrieren, bekomme ich diese Meldung nicht, habe jedoch später ein Problem, wenn ich z.B. bei einem bestimmtem Click-Ereginisses eines Buttons den Thread suspenden oder abbrechen möchte.
Da ist der Thread dann nicht bekannt.
Habt ihr ne Idee, wo ich was falsch mache?
Dr. Z
Wollte es eigentlich für mich behalten, weil wegen peinlich 😉
Da hatte jemand vergessen den Thread zu starten 😁
Vielen Dank für eure Hilfe.
Problem hat sich gelöst. Hab den Wald vor lauter Bäumen nicht gesehen.
Naja, dann hab ich ja jetzt schon wenigstens meinen peinlichsten Beitrag hinter mir 🙂
Kann ja jetzt nur noch bergauf gehen.
Danke für deine Antwort.
Das ich Prüfen muss, ob was ankommt, ist mir klar.
Ich versuche nochmal mein Problem genauer zu schildern:
Ich betätige den Button um den COM1-Port zu "öffnen".
Dieser soll dann so lange geöffnet sein und lesen und die gelesenen Daten verarbeiten, bis die Bedingung der While-Schleife nicht mehr erfüllt ist.
Das Problem ist folgendes:
Würde ich diese Vorgehensweise innerhalb meines Form1 machen, kann ich den Rest vom Programm nicht mehr bedienen, weil das Programm permanent darauf wartet, dass über COM1 was gelesen wird.
Das ist nicht gut. Von daher wollte ich dieses Teil des Programms in einen eigenen Thread auslagern, so dass das Lesen über COM1 unabhängig von Form1 statt findet und meine Anzeigen in Form1.
Hoffe das ist jetzt was genauer.
Dr.Z
@urj:
Dieses Thema habe ich auch gefunden, nur habe ich in dem sinne keine Controls in meinem Formular, sondern nur Variablen, die weiter verarbeitet werden sollen.
Wie z.B im angezeigten Code str_gescannt und die in der verwendeten Klasse privaten Variablen.
Diese Daten bekomme ich leider nicht zurück in meine eigentlich Programm.
Hallo zusammen,
bin schon des öfteren auf der Suche nach Lösungen von meinen Programmierproblemen über diese Seite gestolpert und ich hab immer genau das gefunden was ich gesucht habe 🙂
Da muss man euch einfach mal ein Lob für geben, für die tolle und gute Arbeit und Erläuterungen, Erklärungen für die ganzen Probleme. Macht weiter so.
Aus dem Grund habe ich mich dan auch mal hier angemeldet und schon habe ich die erste Frage, die ich (vllt nicht gut genug gesucht, vllt nicht alles Gefundene verstanden) nicht gelöst bekomme. Auch mit Hilfe des Forums nicht.
Nun komme ich einfach mal zu meinem Problem:
Ich habe ein Programm mit einer GUI. Wenn ich einen Button betätige, "öffne" ich die Verbindung zur seriellen Schnittstelle.
Hier wird auf ein etsprechendes Signal (ein gescannter string) gewartet und soll weiter verarbeitet werden. Und das über die ganze Dauer, wo das Programm gestatrtet ist.
Meine erste Idde:
Ne Schleife.
Mein erster Gedanke nach Umsetzung:
Nicht gut, alles andere im GUI kann nicht mehr verwendet werden 🙂
Meine zweite Idee:
Ich erstelle einen zusätzlichen Thread, in den ich den Teil auslagere, der die ganze Zeit laufen soll.
So weit, so gut. Problem ist nun folgendes:
Möchte ich mir die gescannten Daten anzeigen lassen, passiert leider nichts 🙂
private void btn_comoo_Click(object sender, EventArgs e)
{
ThreadStart tst_auslagern;
tst_auslagern = new ThreadStart(voncomlesen);
Thread thr_voncomlesen = new Thread(tst_auslagern);
}
private void voncomlesen()
{
SerialPort obj_sp = new SerialPort();
while (btn_comoo.Text == "Deaktivieren")
{
obj_sp.Open();
string str_gescannt = obj_sp.ReadLine();
obj_sp.Close();
CutString obj_cs = new CutString();
obj_cs.betweenintern(str_gescannt, 'b', 'c');
MessageBox.Show(str_gescannt + obj_cs.str_knummer + obj_cs.str_anummer);
}
}
Ich hoffe ihr habt mein Problem verstanden und könnt mit weiter helfen.